12

背景:瀏覽器不提示輸入客戶端證書

我更新的內部應用到了兩步認證處理。我想在傳統的用戶名/密碼錶單上添加客戶端證書身份驗證過程(通過智能卡)。該應用程序使用C#編寫,託管在IIS7上,並針對Chrome和IE8。

問題:

我有讓應用程序提示輸入客戶端證書的用戶的問題。我一直在Fiddler的幫助下調試應用程序。當我有一個保存在Fiddler用戶目錄(C:\ Documents and Settings \ USER \ My Documents \ Fiddler2)中的測試客戶端證書時,應用程序按預期工作。系統會提示輸入保護智能卡的PIN號碼,並且輸入正確後,會將我帶到登錄表單。當我關閉Fiddler時,應用程序會拋出403 Forbidden錯誤(因爲Fiddler不再運行並指向其證書)。我無法弄清的是爲什麼應用程序不會正常提示輸入證書。

當前服務器設置:

  • 自簽名證書創建
  • 443綁定在自簽名證書指向
  • 匿名認證功能
  • 簽名證書的自加入兩受信任的根CA和中級CA(我讀了另一個人在兩個版本中都擁有它,而不僅僅是受信任的根CA,並且解決了他們的問題,但這兩個設置都不適用於我們)。
  • 我清除了我不需要的受信任根CA中的其餘證書(我在其他地方讀過,有太多證書會導致SSL窒息)。

我沒有想法嘗試,而不是從頭開始在另一臺服務器上。有誰知道這個問題可能是什麼?這看起來應該是相當直接的,我錯過了一些小事。任何想法都歡迎。

更新:

今天花更多的時間與這個問題後,我強烈相信這與IIS7沒有被正確配置的話(我沒有設置它最初)。我認爲這是因爲我啓用了失敗的請求跟蹤,查看了正在生成的後續.xml文件,並看到引發了500錯誤。

Chrome正在拋出「拒絕訪問網頁」消息,而不是「403 - 禁止訪問:訪問被拒絕」。我不知道這是否有幫助。我知道,當我不需要證書時,網站將按預期工作。要求證書是失敗的地方。

應用程序池設置爲.Net 4.0 |經典|網絡服務。

+0

不知道我可以幫忙,但有幾個問題:1)你是否嘗試過IE或FF? 2)可能想在另一臺服務器上覆制結果。我已經看到了很多幫助/解決這個問題的問題 - 它也讓您有機會了解IIS7網站的設置; 3)是否有更多的客戶端和/或服務器日誌可以嘗試獲得更多的見解 - 看起來可能更多在IIS7方面。 – Lizz 2013-03-01 21:47:36

回答

7

問題是,瀏覽器既沒有獲得提供客戶端證書的請求,也沒有安全相關的選項來阻止它發生。 IE僅在網站位於正確區域(Int​​ranet或可信站點)時才提供證書。請檢查一切之前。

如果這沒有幫助,那麼請參閱此answer下一步。在netsh文件說:

clientcertnegotiation 
Optional. Specifies whether the negotiation of certificate is enabled or disabled. Default is disabled. 

啓用該連最笨的瀏覽器應該注意到,它應該提供證書進行身份驗證。要進一步診斷您的問題,您可以使用WireShark來查看正在進行的協商。

+0

我不能滿足這個。經過幾天的排除故障後,我們的客戶並未將我們的網站置於受信任區域。感謝您解釋這一點併爲我節省更多的時間。 – 2016-02-19 11:52:50

4

嘗試openssl s_client -connect yourip:443 -prexit 然後查看CA(您的自簽名證書)是否發送給可接受客戶端證書CA名稱中的客戶端。

您需要首先安裝OpenSSL的,如果你沒有它

+0

我有類似的問題,所以我嘗試了'openssl s_client -connect yourip:443 -prexit',並且看到一些錯誤信息'CONNECTED(00000104) write:errno = 10054 --- 沒有對等證書可用,儘管我已在IIS上將有效的SSL證書配置爲*:443。 – RanPaul 2016-01-21 15:45:43

+0

@RanPaul我知道這很晚了,但是如果你在Windows機器上,請注意OpenSSL不能識別Windows證書存儲。所以你需要提供'-CApath'或'-CAfile'。您可以下載[Mozilla的.PEM文件](https://curl.haxx.se/docs/caextract.html),或者從需要的鏈中創建您自己的。確保安裝[最新版本的OpenSSL](https://slproweb.com/products/Win32OpenSSL.html)。 – 2018-02-27 08:47:08

3

在每一個瀏覽器我見過你,瀏覽器不會提示您選擇一個證書,如果它不具有CA簽署的任何證書服務器信任。所以請確保您的服務器配置了正確的CA。正如Boklucius建議的那樣,您可以使用openssl來檢查服務器發送給客戶端的可信CA列表,並查看您是否簽有客戶端證書的CA。

1

一個相當慘痛的教訓加進來:確保你退出Skype(或任何其他應用程序)吃端口443

所以這裏的想法是,如果你正在運行在同一臺機器上的開發環境(客戶端和IIS),並且您的團隊使用Skype或其他應用進行通信。

當你嘗試和調試這個問題時,看着時間過去,似乎做的一切都是「正確的」,netsh http sslcerts等,甚至重新啓動,但無濟於事。那麼,事實證明,Skype會吃掉443,所以關掉它,「噗」的出現你的證書提示。

然後隨意把東西扔在牆上,大聲嚷嚷或只是「憤怒,憤怒反對死亡的光明」。

0

另外,請確保Fiddler不會妨礙您。如果你對SSL進行解密,它會將該消息破壞回IE,並且它沒有安裝證書,所以它不能提供它。關掉小提琴手,瞧,證書提示出現。