Active-Directory

如何解決被 GP 破壞的 IIS10 客戶端證書安全問題?

  • May 19, 2020

我有一個奇怪的情況。我的 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 沒有問題,因為我事先遵循了 thisthisthis指南。結果:

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 以受控方式進行測試和應用,它們就不是敵人。

引用自:https://serverfault.com/questions/1014664