2014-12-01 402 views
12

我正在使用Windows Server 2012和IIS 8.5。我爲網站設置了SSL,SSL設置爲:需要並需要客戶端證書。IIS 8.5 - 相互證書身份驗證失敗,錯誤403.16

我要發送給服務器的客戶端證書已由自簽名權限(我們稱之爲MyCompany CA)頒發。 MyCompany CA證書已成功安裝在本地計算機帳戶 - 受信任的根證書頒發機構中。它的到期日期是2039,客戶端證書到期日期也是如此。

但是,所有這些設置,我得到一個錯誤403.16作爲結果。我已經啓用失敗請求跟蹤規則,併成功地記錄一個錯誤的請求,並得到有關它的一些額外的細節:

52.- MODULE_SET_RESPONSE_ERROR_STATUS - 警告 模塊名 - IIS Web核心 通知 - BEGIN_REQUEST 的HTTPStatus - 403 HttpReason - Forbidden HttpSubStatus - 16 ErrorCode - 證書鏈已處理,但終止於信任提供程序不信任的根證書。 (0x800b0109) ConfigExceptionInfo

我檢查了有關結果403.16和錯誤代碼0x800b0109多個站點,他們都指向不被安裝在本地計算機的證書頒發機構 - 受信任的根證書頒發機構,但這不是我的情況。

謝謝!

回答

40

我一直在爲此工作很長時間,終於找到了它!

添加新鍵HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \控制\ 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 \控制\ SecurityProviders \ SCHANNEL 值名稱:ClientAuthTrustMode 值類型:REG_DWORD 值數據:2

將HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\ SecurityProviders \ SCHANNEL 值名稱:SendTrustedIssuerList 值類型:REG_DWORD 值數據:0(False或完全刪除此鍵)

下面是關於這個特定設置一些更多的信息(這裏找到:http://technet.microsoft.com/en-us/library/hh831771.aspx

信任模式的默認值 Schannel提供程序支持三種客戶端身份驗證信任模式。信任模式控制如何執行客戶端證書鏈的驗證,並且是由HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ Schannel下的REG_DWORD「ClientAuthTrustMode」控制的系統範圍設置。

0機器信任(默認) 要求客戶端證書由可信發行者列表中的證書頒發。

1 Exclusive Root Trust 要求客戶端證書鏈接到調用方指定的可信發行人存儲中包含的根證書。證書必須也可以通過在受信任的發行人列表中的發行者發行

2專屬CA信託 要求客戶端證書鏈要麼在主叫方指定的可信發行者存儲的中間CA證書或根證書。 有關由於受信任的頒發者配置問題而導致身份驗證失敗的信息,請參閱知識庫文章280256.

希望爲您工作。

+1

在Client Authentication Issuers存儲中添加證書後,我必須重新啓動。因人而異。 – Timores 2015-06-08 09:46:52

+0

除了這個解決我2012年問題的答案之外,我發現我還需要在Windows Server 2008 R2/IIS 7.5上執行此操作。根據你對這個問題的描述以及在那個盒子裏我得到403.7而不是403.16的事實,我不認爲這會有所作爲,但它確實如此。謝謝! – rusty 2015-07-22 20:31:10

+1

ClientAuthTrustMode值類型:REG_DWORD值數據:2 - 無法在Windows 2012 R2上運行。仍然得到403.16錯誤 – mit 2016-11-28 12:36:28

1

我必須重新啓動服務器才能應用ClientAuthTrustMode設置。

0

我試過上面提出的解決方案,它工作正常。

另一種解決方案,不涉及編輯註冊表:

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文件夾中。

+0

在http://stackoverflow.com/a/35001970/237568類似的線路上的好答案還包括一個PowerShell單行程序將非自簽名證書移動到中間證書頒發機構文件夾:) – 2017-03-03 14:25:19