Azure 中的客户端证书身份验证和 CA 证书
Posted
技术标签:
【中文标题】Azure 中的客户端证书身份验证和 CA 证书【英文标题】:Client certificate authentication and CA certificate in Azure 【发布时间】:2013-01-26 12:53:27 【问题描述】:我需要使用客户端证书对 Azure 云服务 Web 角色 的请求进行身份验证。如何将证书颁发机构 (CA) 根证书放入正确的受信任存储区?
我尝试将其上传到管理门户中,然后使用 AuthRoot 商店名称在服务定义文件中对其进行定义:
<Certificate name="RootCA" storeLocation="LocalMachine" storeName="AuthRoot" />
真正奇怪的是它可以工作......但只是有时。它可能在实例重启后工作,但在服务更新或另一个实例重启后可能无法工作。这似乎是 Azure 中的一个错误。
当我说“工作”时,我的意思是服务器成功接受了客户端证书并处理了请求。 当我说“不起作用”时,我的意思是服务器在证书检查后没有协商连接,并且“请求被中止:无法创建 SSL/TLS 安全通道”。客户端抛出异常。
如何让它稳定运行?
UPD:
在系统 Windows 事件日志中找到这条记录(来源为 Schannel):
当请求客户端身份验证时,此服务器发送一个列表 客户信任的证书颁发机构。客户端使用这个 列表以选择服务器信任的客户端证书。 目前,该服务器信任如此多的证书颁发机构,以至于 列表太长了。因此,此列表已被截断。这 这台机器的管理员应该检查证书 信任客户端身份验证的权威机构并删除那些 真的不需要被信任。
【问题讨论】:
【参考方案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>
【讨论】:
以上是关于Azure 中的客户端证书身份验证和 CA 证书的主要内容,如果未能解决你的问题,请参考以下文章
加密解密*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证