Apache-2.2
要求 Apache 中特定中間 CA 頒發的客戶端證書
我有這樣的 CA 層次結構:
根CA ________|_____________ | | 測試-CA 生產-CA _____|_____ ____|____ | | | | 測試-SRV 測試-CLI 產品-SRV 產品-CLI
從 PROD-SRV 伺服器證書標識的生產伺服器的角度來看,我將如何設置 Apache mod_ssl 以要求 PRODUCTION-CA 簽名的 PROD-CLI 客戶端證書,並且不允許具有 TEST-CLI 證書的客戶端簽名測試-CA?
目前我有:
SSLCertificateFile prod_srv.crt SSLCertificateKeyFile prod_srv.pem SSLCADNRequestFile prod_ca.crt SSLCACertificateFile root_ca.crt
這看起來很有效,因為伺服器向瀏覽器詢問 PROD CLI 證書,但如果我提供 TEST CLI 證書,則會建構有效的證書路徑,並且生產系統接受測試客戶端。
查看SSLRequire指令 - 以下規則應查看所提供證書的頒發者欄位(即 CA 證書),選擇 CN,並將其與您的 PRODUCTION-CA 證書的名稱相匹配。
SSLRequire %{SSL_CLIENT_I_DN_CN} == "PRODUCTION-CA"
我想使用中間 CA 的子 CA 頒發的證書對客戶端進行身份驗證,如下所示:
Root-CA | Intermediate-CA ________|_____________ | | SUB-CA 1 SUB-CA 2 _____|_____ ____|____ | | | | TEST-SRV TEST-CLI PROD-SRV PROD-CLI
您可以使用 SSL_CLIENT_CERT_CHAIN_n 變數來檢查鏈,例如執行以下操作:
SSLRequireSSL SSLVerifyClient require SSLCACertificateFile ".../root-ca.cert.pem" Require expr %{SSL_CLIENT_CERT_CHAIN_1} == file(".../intermediate.cert.pem")
甚至多個一級中間CA:
Require expr %{SSL_CLIENT_CERT_CHAIN_1} in { file(`".../intermediate.cert.pem"), file(".../intermediate2.cert.pem") }