gpt4 book ai didi

.net - Azure 云服务(经典)-单个实例缺少根 CA/SSL 证书,无法验证

转载 作者:行者123 更新时间:2023-12-03 02:39:53 25 4
gpt4 key购买 nike

我有一个在 Azure 中运行的云服务(经典),它托管 WCF 服务。通过云服务的扩展功能在云服务中配置多个实例。 SSL 通配符证书已通过 Azure 门户提供,并在相应 Visual Studio Cloud 项目的 csdef/cscfg 中进行配置。直到最近,一切都运行良好,没有发生证书等问题。

.csdef

<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint2" endpointName="EndpointSSL" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="EndpointSSL" protocol="https" port="443" certificate="SSL" />
</Endpoints>
<Certificates>
<Certificate name="SSL" storeLocation="LocalMachine" storeName="My" />
</Certificates>

.cscfg

<Role name="FR">
<Instances count="3" />
<ConfigurationSettings>
<!-- Settings are set here -->
</ConfigurationSettings>
<Certificates>
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="THUMBPRINT_A" thumbprintAlgorithm="sha1" />
<Certificate name="SSL" thumbprint="THUMBPRINT_B" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>

证书已正确安装,您可以在 Windows 的证书管理窗口中看到。不幸的是,从上周开始,当通过 SSL Labs (https://www.ssllabs.com/ssltest/) 检查该网站时,它开始在结果报告中提供两个证书,其中一个证书无效,因为证书链似乎已损坏。使用相同通配符证书的其他服务不存在此问题。

到目前为止我所知道的关于这个问题的信息:

  • Windows 本身无法验证三个正在运行的实例之一的证书存储中的证书。
  • 在另外两个实例中,证书是正确的并且可以通过 Windows 进行验证
  • 证书无效的实例在 Windows 的“受信任的根 CA”存储中没有相应的根 CA。
  • 重新部署、重新镜像、重新启动等均无济于事。它可能只是将问题从一个实例转移到另一个实例。到目前为止,一次只有一个实例受到影响。
  • 未进行任何手动更改,最近也未应用更新的部署。它突然开始发生

Certificates on the invalid and a correct instance

有人知道问题可能是什么吗?我还向微软发起了支持请求,但到目前为止他们也没有任何线索。部署时是否有任何我可以尝试的设置强制在部署时验证证书?或者是否有任何选项可以在启动时从代码中获取丢失的根 CA(因为我怀疑这可能是无法在一个实例上验证它的问题)?

最佳答案

Microsoft Azure 支持人员也不知道此行为的根本原因,但他们暂时提出了合适的解决方法。

在云服务中,添加了一个启动任务,用于检查所有根 CA 列表中是否存在可能丢失的根 CA。如果没有,将安装缺少的那个(通过 Powershell)。之后,丢失的根 CA 应该已添加到根 CA 列表中,并且可以成功验证实际的 SSL 通配符证书(验证失败) - 通过 SSLLabs 的检查将再次起作用。

至少对于我的问题来说,这解决了问题。我对此并不完全满意,因为我想知道根本原因,但微软似乎意识到了这个问题,并且(据我所知)正在进一步调查。如果出现任何正确的解决方案(而不是解决方法),我也会尝试将其添加到此处。

启动任务的 CMD 文件:

SET LOG_FILE="%TEMP%\StartupLog.txt"
SET EXECUTE_PS1=0

IF "%ComputeEmulatorRunning%" == "" (
SET EXECUTE_PS1=1
)

IF "%ComputeEmulatorRunning%" == "false" (
SET EXECUTE_PS1=1
)

IF %EXECUTE_PS1% EQU 1 (
echo "Invoking InstallCertificateSSLConfigure.ps1 on Azure service at %TIME% on %DATE%" >> %LOG_FILE% 2>&1
PowerShell -ExecutionPolicy Unrestricted .\Startup\InstallCertificate.ps1 >> %LOG_FILE% 2>&1
IF %ERRORLEVEL% NEQ 0 (EXIT /B %ERRORLEVEL%)
) ELSE (
echo "Skipping InstallCertificate.ps1 invocation on emulated environment" >> %LOG_FILE% 2>&1
)

EXIT /B 0

用于安装证书的 Powershell 脚本(从 CMD 执行)

$thumbprint = "THUMBPRINT"
$path = ".\Startup\MISSING ROOT CA.crt"

$cert = Get-ChildItem -Path Cert:\LocalMachine\Root | Where-Object {$_.Thumbprint -eq $thumbprint}

if ( $cert )
{
Write-Host "The Certificate $($cert.Thumbprint) is installed already"
}
else
{
Write-Host "The Certificate $thumbprint is not installed"
Import-Certificate -FilePath $path -CertStoreLocation Cert:\LocalMachine\Root
Write-Host "installed the Certificate $thumbprint"
}

关于.net - Azure 云服务(经典)-单个实例缺少根 CA/SSL 证书,无法验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61659645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com