首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure中的客户端证书认证和CA证书

Azure中的客户端证书认证和CA证书
EN

Stack Overflow用户
提问于 2013-02-11 12:25:55
回答 1查看 4.8K关注 0票数 6

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

我尝试将其上载到Management中,然后在服务定义文件中使用AuthRoot存储名定义它:

代码语言:javascript
复制
<Certificate name="RootCA" storeLocation="LocalMachine" storeName="AuthRoot" />

真正奇怪的是它能工作..。但只是有时候。它可能在实例重新启动后工作,但在服务更新或另一个实例重新启动之后可能无法工作。好像是Azure的一只虫子。

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

如何使其工作稳定?

UPD:

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

当请求客户端身份验证时,此服务器向客户端发送受信任证书颁发机构的列表。客户端使用此列表选择服务器信任的客户端证书。当前,此服务器信任如此多的证书颁发机构,以致列表增长得太长。因此,此列表已被截断。此计算机的管理员应检查为客户端身份验证而受信任的证书颁发机构,并删除那些不真正需要信任的证书颁发机构。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-13 08:45:18

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

2012年12月后,Windows将大量证书添加到AuthRoot存储中。所以我们必须移除他们来解决这个问题。

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

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

要从CMD启动任务运行它:

代码语言:javascript
复制
PowerShell -ExecutionPolicy Unrestricted .\Startup.ps1
exit /b %errorlevel%    

在ServiceDefinition.csdef中:

代码语言:javascript
复制
<WebRole name="Web">
  <Startup>
    <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" />
  </Startup>
  <!-- ... ->
</WebRole>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14811843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档