web-dev-qa-db-ja.com

相互証明書認証がエラー403.16で失敗する

Windows Server 2012を使用していますIIS8.5。WebサイトにSSLを設定しており、SSL設定は次のとおりです:必須とクライアント証明書が必要です。

サーバーに送信するクライアント証明書は、自己署名機関(MyCompany CAと呼びます)によって発行されています。 MyCompany CA証明書は、ローカルコンピューターアカウント-信頼されたルート証明機関に正常にインストールされました。有効期限は2039で、クライアント証明書の有効期限も同様です。

ただし、このすべての設定では、結果としてエラー403.16が発生します。失敗した要求のトレースルールを有効にし、誤った要求をログに記録して、それに関するいくつかの詳細を取得しました。

52.- MODULE_SET_RESPONSE_ERROR_STATUS-警告ModuleName-IIS Webコア通知-BEGIN_REQUEST HttpStatus-403 HttpReason-Forbidden HttpSubStatus-16 ErrorCode-証明書チェーンは処理されましたが、信頼されていないルート証明書で終了しました信頼プロバイダー(0x800b0109)ConfigExceptionInfo

結果403.16とエラーコード0x800b0109に関して複数のサイトをチェックしましたが、すべてのサイトがローカルコンピューターにインストールされていない証明機関-信頼されたルート証明機関を指していますが、それは私の場合ではありません。

ありがとう!

17
Javier Holguera

私はこれに長い間取り組んでおり、ついにそれを見つけました!

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNELに新しいキーを追加します。値の名前:ClientAuthTrustMode値のタイプ:REG_DWORD値のデータ:2

ウェブページを更新し、証明書を選択して、魔法が起こるのを見てください。

研究

Windows 8とIIS 8.5を使用して、ここの指示に従いました http://itq.nl/testing-with-client-certificate-authentication-in-a-development-environment- on-iis-8-5 /

証明書は正しい場所に作成され、すべてIIS=で適切に構成されましたが、403.16エラーが発生し続けました。

多くのMSDN記事やその他の試みが失敗した後、次のレジストリ設定を見つけました。

セットHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL値の名前:ClientAuthTrustMode値のタイプ:REG_DWORD値のデータ:2

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNELを設定します。値の名前:SendTrustedIssuerList値のタイプ:REG_DWORD値のデータ:0(False、またはこのキー全体を削除します)

この特定の設定についての詳細情報を次に示します(ここにあります http://technet.Microsoft.com/en-us/library/hh831771.aspx

信頼モードのデフォルトSchannelプロバイダーでサポートされている3つのクライアント認証信頼モードがあります。信頼モードは、クライアントの証明書チェーンの検証が実行される方法を制御し、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannelの下のREG_DWORD“ ClientAuthTrustMode”によって制御されるシステム全体の設定です。

0マシン信頼(デフォルト)クライアント証明書が、信頼できる発行者リストの証明書によって発行されることを要求します。

1排他的ルート信頼クライアント証明書が、呼び出し元が指定した信頼された発行者ストアに含まれるルート証明書にチェーンする必要があります。証明書は、信頼できる発行者リストの発行者によっても発行される必要があります

2排他的CA信頼呼び出し元が指定した信頼された発行者ストア内の中間CA証明書またはルート証明書へのクライアント証明書チェーンが必要です。信頼できる発行者の構成の問題による認証の失敗については、ナレッジベースの記事280256を参照してください。

この作業もあなたのために願っています。

49
Brett

私は上記の解決策を試しましたが、うまくいきます。

レジストリの編集を含まない別のソリューション:

https://support.Microsoft.com/en-us/help/2795828/lync-server-2013-front-end-service-cannot-start-in-windows-server-2012

この記事の要点は、署名されていないすべての証明書をローカルコンピューターの信頼されたルートフォルダーから削除することです。

グループポリシーを使用して証明書を展開する場合は、信頼されたルート証明機関ストアに自己署名証明書(証明書プロパティ "Subject"が証明書プロパティ "Issuer"と同じである証明書)のみが含まれていることを確認してください。自己署名証明書ではない証明書をすべて、信頼されたルート証明機関ストアから中間証明機関ストアに移動します。

新しい証明書を手動でインポートする場合は、自己署名証明書にはコンピューターの信頼されたルート証明機関ストアを選択し、自己署名証明書ではない証明書にはコンピューターの中間証明機関ストアを選択してください。

Powershellスクリプトを使用して、自己署名されていないすべての証明書を見つけることができます。

Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject} | Format-List * | Out-File "c:\computer_filtered.txt"

それらの証明書をmmcのIntermediate Certification Authoritiesフォルダーに移動します。

4
zakmyster

ClientAuthTrustMode設定を適用するには、サーバーを再起動する必要がありました。

2
dezdez