6

クライアント証明書を使用して、Azure CloudServiceWebロールへの要求を認証する必要があります。認証局(CA)のルート証明書を適切な信頼できるストアに配置するにはどうすればよいですか?

管理ポータルにアップロードしてから、 AuthRootストア名を使用してサービス定義ファイルで定義しようとしました。

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

本当に奇妙なのは、それが機能することです...しかし、たまにしかありません。インスタンスの再起動後には機能する場合がありますが、サービスの更新または別のインスタンスの再起動後には機能しない場合があります。Azureのバグのようです。

「動作する」とは、サーバーがクライアント証明書を正常に受け入れて要求を処理することを意味します。「機能しない」とは、証明書の確認後にサーバーが接続をネゴシエートせず、「要求が中止されました:SSL/TLSのセキュリティで保護されたチャネルを作成できませんでした」という意味です。クライアント側で例外がスローされます。

安定して動作させる方法は?

UPD:

システムWindowsイベントログでこのレコードが見つかりました(ソースはSchannelです):

クライアント認証を要求すると、このサーバーは信頼できる認証局のリストをクライアントに送信します。クライアントはこのリストを使用して、サーバーによって信頼されているクライアント証明書を選択します。現在、このサーバーは非常に多くの認証局を信頼しているため、リストが長くなりすぎています。したがって、このリストは切り捨てられています。このマシンの管理者は、クライアント認証で信頼されている認証局を確認し、実際に信頼する必要のない認証局を削除する必要があります。

4

1 に答える 1

6

正確な問題はここに記述されています:http ://support.microsoft.com/kb/2801679 。

2012年12月のWindowsUpdate以降、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>
于 2013-02-13T08:45:18.500 に答える