如何解決被 GP 破壞的 IIS10 客戶端證書安全問題?
我有一個奇怪的情況。我的 Win 2016 伺服器被 AD 組策略破壞了。
在 X 時刻自動 AD 組策略更新後,IIS 10 開始拋出 403 錯誤。事先遠端方通過帶有客戶端證書的 https 毫無問題地呼叫我們。
我在 X 時刻之前和 X 時刻之後都有備份,但我無法確定 AD GP 更改的設置。
我有一份設置文件,其中包含從頭開始設置我們的 Web 服務所需的所有設置。我已經根據受害者伺服器檢查了它們。沒有改變。在每個級別啟用匿名身份驗證並啟用 SSL 設置-> 客戶端證書-> 接受。
我們的管理員發誓他們沒有改變任何東西。IIS 日誌在 X 時刻之後什麼也沒有顯示。
任何想法在哪裡看?系統資料庫?元數據庫?
根據 SOAP e2e 跟踪日誌返回給呼叫者的確切錯誤:
The HTTP request was forbidden with client authentication scheme 'Anonymous'.[The remote server returned an error: (403) Forbidden.]
簡短的回答
檢查流氓證書。就我而言,受信任的根證書頒發機構證書儲存中有一個非自簽名證書。我們的管理員已將這個政府頒發的證書添加到整個森林(通過組策略),而沒有事先進行適當的測試。
細節
我在這裡放了一些一般性的故障排除指南,以幫助人們在 3 週內解決此類問題,就像我的情況一樣。
AD 組政策
如果您不熟悉組策略,請使用以下命令獲取人類可讀的報告(最好由 IE 查看):
GPRESULT /H C:\GPReport.html
要查看更多詳細資訊,請
RSOP.MSC
按照@twconnell推薦使用。RSOP.MSC 顯示應用的本地和組策略的有效快照。驗證安全性Computer Configuration > Windows Settings > Security Settings > Local Policies > User Rights Assignment
。就我而言,我已經徹底閱讀了這個優秀的SO 答案,並關注了那裡的每個連結。然後我檢查了每個文件、文件夾和應用程序池的訪問權限。那裡沒有任何問題。IIS 日誌
查看 IIS 日誌。應該有更多的細節,而不僅僅是
403
提供給客戶的程式碼。就我而言,那裡有403 16
程式碼。查看此故障排除指南。就我而言,它很短:
Client certificate is untrusted or invalid
證書吊銷列表 (CRL)
我的證書 CA 是 AD 提供的公司 CA,所以我最初認為證書吊銷列表 (CRL) 可能存在問題。最好的實用指南就是這個。要了解更多細節,請閱讀此,此,最後是此怪物。就我而言,CRL 沒有問題,因為我事先遵循了 this、this和this指南。結果:
netsh http 顯示 sslcert ipport=0.0.0.0:443 ... 驗證客戶端證書吊銷:已禁用 僅使用記憶體的客戶端證書驗證吊銷:已禁用 使用檢查:禁用 撤銷新鮮時間:0 URL 檢索超時:0 Ctl 標識符:(空) Ctl 商店名稱:(空) DS 映射器用法:已禁用 協商客戶端證書:已啟用 ...
SSL 調試
從客戶端調試 SSL 使用
openssl
工具(假設 myserver 使用通用 443 埠進行 https):openssl s_client -connect myserver:443
在我的情況下
acceptable CAs for client certificates
,最初是空的,所以我將HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\SendTrustedIssuerList
DWORD 值設置為 1 並按照本指南(接近底部)重新啟動伺服器。請注意,客戶端證書 IIS 問題的可接受 CA 的空列表也可能發生,因為根據這個 SF question的 CA 列表很大。
acceptable CAs for client certificates
當您在輸出中有一個列表時,openssl
您可以將其與伺服器上配置的證書儲存的內容進行比較。就我而言,那裡只有一個證書屬於Trusted Root Certification Authorities
. 因此,經過幾天的調查,我看到了這篇ms-support 文章 #2802568。實際上,一個放置不當的非自簽名證書注定了整個身份驗證鏈。結語
引用@tylerl
SSL 客戶端身份驗證是一團糟。這很好,因為它絕對安全,但它很糟糕,因為它很難設置和維護。除非您有充分的理由,否則請改用共享密鑰身份驗證(即“密碼”)。您將節省時間和金錢。當安全性大大超過成本時,SSL 身份驗證非常有用。
組策略和 IIS 伺服器的一個常見問題是當 GPO 覆蓋本地安全策略分配的使用者權限並且 IIS 服務帳戶無法登錄時。如果發生這種情況,Windows 安全日誌應該包含 IIS 伺服器服務帳戶的 EventId 4625 登錄失敗事件。
您可以通過從 IIS 伺服器執行 RSOP.MSC 並導航到電腦配置 > 策略 > Windows 設置 > 安全設置 > 本地策略 > 使用者權限分配來快速驗證任何 GPO 干擾
查看源 GPO 列以確定哪個 GPO 正在應用設置。使用 gpedit.msc 查看/編輯本地組策略應用的設置。
您可以使用本文來驗證您的 IIS 伺服器權限。從頁面底部的“本地安全策略分配的 Windows 使用者權限”表開始。
請記住:只要 GPO 以受控方式進行測試和應用,它們就不是敵人。