Apache-2.2

無法獲取自簽名 CA 證書來請求相應的客戶端證書;阿帕奇

  • March 12, 2013

我在 Windows 上執行 Apache 2.2,並且 mod_ssl 可以正常工作以提供商業簽名的伺服器證書。(萬用字元證書,儘管我認為這並不重要。)

我試圖讓某些 VirtualHosts 上的伺服器需要客戶端證書,因此我建構了一個包含 PEM 的 SSLCACertificateFile;據我了解,應該為客戶端提供簽名 DN 列表,以便在 SSL 建立期間做出響應。

我有一個 StartSSL 個人身份證書,如果我將 StartSSL 的根證書放入 SSLCACertificateFile,瀏覽器(Chrome 和 IE 測試)會彈出“選擇證書”並顯示我的 StartSSL 證書。

但是,我真正的案例是使用我自己的 CA,並簽署客戶端證書,就是我無法工作的地方。我對 CA 進行自簽名,然後創建一個客戶端 CSR 並使用 CA 證書對其進行簽名並將其載入到我的客戶端證書儲存中,然後我將 CA PEM 放入我的 SSLCACertificateFile - 並且瀏覽器不提供客戶端證書在“選擇證書”中。

哇。

因為這一切都適用於 StartSSL CA 和證書,所以我想知道這是否真的是我的 CA 證書或客戶端證書的問題——但我無法弄清楚問題可能是什麼;CA 證書用於簽名,並且具有 CA:TRUE;客戶端證書以客戶端身份驗證為目的……缺少什麼。

不確定如何診斷;謝謝。

這是我的 CA PEM,粘貼到 SSLCACertificateFile 中:

Certificate:
   Data:
       Version: 3 (0x2)
       Serial Number:
           bf:45:a7:db:f9:8e:8f:d0
       Signature Algorithm: sha1WithRSAEncryption
       Issuer: C=US, ST=California, L=San Diego, O=TestCA, OU=TestCA-OU, CN=TestCA-CN
       Validity
           Not Before: Mar  8 21:39:52 2013 GMT
           Not After : Apr  7 21:39:52 2013 GMT
       Subject: C=US, ST=California, L=San Diego, O=TestCA, OU=TestCA-OU, CN=TestCA-CN
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
           RSA Public Key: (2048 bit)
               Modulus (2048 bit):
                   <snip>
               Exponent: 65537 (0x10001)
       X509v3 extensions:
           X509v3 Subject Key Identifier:
               5E:99:47:8A:52:D3:38:20:68:A5:91:D9:E1:2E:6B:50:0D:5C:98:CB
           X509v3 Authority Key Identifier:
               keyid:5E:99:47:8A:52:D3:38:20:68:A5:91:D9:E1:2E:6B:50:0D:5C:98:CB

           X509v3 Basic Constraints:
               CA:TRUE

Signature Algorithm: sha1WithRSAEncryption
<snip>

…這是客戶證書:

Certificate:
   Data:
       Version: 3 (0x2)
       Serial Number: 20481 (0x5001)
       Signature Algorithm: sha1WithRSAEncryption
       Issuer: C=US, ST=California, L=San Diego, O=TestCA, OU=TestCA-OU, CN=TestCA-CN
       Validity
           Not Before: Mar  8 23:46:55 2013 GMT
           Not After : Mar  8 23:46:55 2014 GMT
       Subject: C=US, ST=California, L=San Diego, O=TestClient, OU=TestClient-OU, CN=TestClient-CN
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
           RSA Public Key: (2048 bit)
               Modulus (2048 bit):
                   <snip>
               Exponent: 65537 (0x10001)
       X509v3 extensions:
           X509v3 Basic Constraints:
               CA:FALSE
           X509v3 Key Usage:
               Key Encipherment
           X509v3 Extended Key Usage:
               TLS Web Client Authentication
   Signature Algorithm: sha1WithRSAEncryption
<snip>

/*******************************************************************/

根據邁克的要求提供更多資訊(我嘗試了幾次來獲得“openssl s_client”的行為。)

結果如下:

$$ … $$

---
Acceptable client certificate CA names
/C=UK/O=Test Certificates/CN=Test CA
/C=US/ST=California/L=San Diego/O=TestCA/OU=TestCA-OU/CN=TestCA-CN
/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certific
ation Authority
---

$$ … $$ 所以,伺服器說

/C=美國/ST=加利福尼亞/L=聖地亞哥/O=TestCA/OU=TestCA-OU/CN=TestCA-CN

是可接受的客戶端證書,並且客戶端具有

發行人:C=US, ST=California, L=San Diego, O=TestCA, OU=TestCA-OU, CN=TestCA-CN

在它的商店裡——但瀏覽器沒有把它包含在我可以選擇的列表中。瀏覽器確實提供了由

/C=UK/O=測試證書/CN=測試 CA

/C=IL/O=StartCom Ltd./OU=安全數字證書籤名/CN=StartCom 證書頒發機構

…帶我回到“WTF?”

是的,我正在回答我自己的問題。

解決了。

結果證明這KeyUsage keyEncipherment不是 SSL/TLS 客戶端的正確 keyUsage。正確的 KeyUsage 約束是KeyUsage digitalSignature; 在這篇 Mozilla 文章中找到了有用的資訊。

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