Azure中的客户端证书身份验证和CA证书

时间:2013-02-11 12:25:55

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

我需要使用客户端证书对Azure Cloud Service Web角色的请求进行身份验证。如何将证书颁发机构(CA)根证书放入正确的可信商店?

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

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

真正奇怪的是它有效......但有时候才有效。它可能在实例重新引导后工作,但在服务更新或其他实例重新引导后可能无法工作。这似乎是Azure中的一个错误。

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

如何使其稳定运行?

UPD:

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

  

当要求客户端身份验证时,此服务器会发送一个列表   客户端的可信证书颁发机构。客户端使用它   列表以选择服务器信任的客户端证书。   目前,这台服务器信任那么多的证书颁发机构   名单已经增长太久了。因此该列表被截断。该   本机的管理员应该检查证书   当局信任客户端身份验证并删除那些   不是真的需要信任。

1 个答案:

答案 0 :(得分:6)

这里描述了确切的问题: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>