2013-02-11 242 views
6

我需要验证对Azure云服务的请求使用客户端证书的Web角色。如何将证书颁发机构(CA)根证书置于正确的可信存储中?Azure中的客户端证书身份验证和CA证书

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

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

什么是真正奇怪的是,它的作品...但只是偶尔。它可能在实例重新启动后工作,但在服务更新或另一个实例重新启动后可能不起作用。这似乎是Azure中的一个错误。

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

如何使其工作稳定?

UPD:

发现在系统Windows事件日志此记录(来源Schannel中):

当要求客户端身份验证,此服务器发送 受信任的证书颁发机构的列表客户端。客户端使用此 列表来选择服务器信任的客户端证书。 目前,该服务器信任这么多证书颁发机构,导致列表过长。这个列表因此被截断。本机的管理员应该检查可信的客户端认证机构 ,并删除那些确实不需要信任的机构。

回答

6

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

2012年12月之后Windows更新了许多证书被添加到AuthRoot商店。所以我们必须删除它们来解决问题。

为了让我使用PowerShell启动任务:

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

而且ServiceDefinition.csdef中:

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

从CMD启动任务运行

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