【问题标题】:Client certificate authentication and CA certificate in AzureAzure 中的客户端证书身份验证和 CA 证书
【发布时间】:2013-01-26 12:53:27
【问题描述】:

我需要使用客户端证书对 Azure 云服务 Web 角色 的请求进行身份验证。如何将证书颁发机构 (CA) 根证书放入正确的受信任存储区?

我尝试将其上传到管理门户中,然后使用 AuthRoot 商店名称在服务定义文件中对其进行定义:

<Certificate name="RootCA" storeLocation="LocalMachine" storeName="AuthRoot" />

真正奇怪的是它可以工作......但只是有时。它可能在实例重启后工作,但在服务更新或另一个实例重启后可能无法工作。这似乎是 Azure 中的一个错误。

当我说“工作”时,我的意思是服务器成功接受了客户端证书并处理了请求。 当我说“不起作用”时,我的意思是服务器在证书检查后没有协商连接,并且“请求被中止:无法创建 SSL/TLS 安全通道”。客户端抛出异常。

如何让它稳定运行?

UPD:

在系统 Windows 事件日志中找到这条记录(来源为 Schannel):

当请求客户端身份验证时,此服务器发送一个列表 客户信任的证书颁发机构。客户端使用这个 列表以选择服务器信任的客户端证书。 目前,该服务器信任如此多的证书颁发机构,以至于 列表太长了。因此,此列表已被截断。这 这台机器的管理员应该检查证书 信任客户端身份验证的权威机构并删除那些 真的不需要被信任。

【问题讨论】:

    标签: azure certificate azure-web-roles client-certificates


    【解决方案1】:

    这里描述了确切的问题:http://support.microsoft.com/kb/2801679

    在 2012 年 12 月的 Windows 更新之后,许多证书被添加到 AuthRoot 存储中。所以我们必须删除它们才能解决问题。

    为此,我使用 PowerShell 启动任务:

    Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\AuthRoot\Certificates | Where-Object {$_.Name -notlike "*\<YOUR_CERTIFICATE_THUMBPRINT>"} | Remove-Item
    

    从 CMD 启动任务运行它:

    PowerShell -ExecutionPolicy Unrestricted .\Startup.ps1
    exit /b %errorlevel%    
    

    在 ServiceDefinition.csdef 中:

    <WebRole name="Web">
      <Startup>
        <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" />
      </Startup>
      <!-- ... ->
    </WebRole>
    

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 1970-01-01
      • 2018-09-16
      • 2011-04-09
      • 2013-10-07
      • 1970-01-01
      • 2018-02-12
      • 2023-04-10
      • 2022-06-23
      相关资源
      最近更新 更多