TLS 1.2 用戶端忽略 Apache ClientCertificateRequest 的「可接受的 CA」列表

TLS 1.2 用戶端忽略 Apache ClientCertificateRequest 的「可接受的 CA」列表

我在 Apache 2.4.54 上使用自簽名 CA 進行 TLS 1.2 相互驗證,並在 iOS 和 MacOS 上測試用戶端。一切正常,除了客戶端無法識別憑證要求上的“可接受的客戶端憑證 CA”,因此使用者/應用程式必須知道該選擇哪一個。在我的 iOS 應用程式上,URLAuthenticationChallenge.protectionSpace.distinguishedNames應該提供此列表的欄位為空。在 MacOS Safari 上,它要求使用者在所有已安裝的證書中選擇一個證書,即使只有 1 個證書具有正確的頒發者 CA。使用

openssl s_client -connect myserver.com:443 -prexit

回報

Acceptable client certificate CA names
/C=US/ST=x/L=x/O=x/OU=x/CN=myca.com/emailAddress=x

相關的apache配置是這樣的。

SSLCACertificateFile /etc/pki/CA/cacert.pem
SSLCADNRequestFile /etc/pki/CA/cacert.pem
SSLVerifyClient require
SSLVerifyDepth  1

沒有 . 我得到相同的結果SSLCADNRequestFile。查看 apache 日誌似乎LogLevel trace8顯示了在 CertificateRequest 上寫入的正確可分辨名稱。這是原始轉儲,因此我無法讀取二進位字段,但我可以看到我的 CA CN 的正確 ASCII。我猜 iOS/MacOS 一定看到了這些數據,但決定不可用。

CA 憑證有X509v3 Basic Constraints: CA:TRUE,但沒有 keyUsage 規格。由於身份驗證有效,我認為只要客戶端選擇正確的證書,證書就可以。

有什麼想法我做錯了嗎,還是如何進一步調試?

答案1

我錯了。可接受的 CA 清單正在傳遞到我的 iOS 應用程式(無論我是否包含 SSLCADNRequestFile)。連接開始時有兩個應用程式回調,DER 編碼的 CA 列表在第二個回調時傳遞。我仍然需要弄清楚為什麼 MacOS Safari 允許我選擇帶有錯誤 CA 的證書,但至少列表正在交付。

相關內容