无法获取自签名 CA 证书来请求相应的客户端证书;Apache

无法获取自签名 CA 证书来请求相应的客户端证书;Apache

我在 Windows 上运行 Apache 2.2,mod_ssl 运行良好,可以提供商业签名的服务器证书。(通配符证书,尽管我认为这并不重要。)

我正在尝试让某些 VirtualHosts 上的服务器要求提供客户端证书,因此我构建了一个包含 PEM 的 SSLCACertificateFile;据我了解,应该在 SSL 建立期间提供签名 DN 列表以供客户端响应。

我有一个 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>

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

根据 Mike 的要求提供更多信息(我尝试了几次才让“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=加利福尼亚、L=圣地亚哥、O=TestCA、OU=TestCA-OU、CN=TestCA-CN

在它的商店里——但浏览器没有把它列入我可以选择的列表中。浏览器提供由以下人员签名的客户端证书

/C=英国/O=测试证书/CN=测试 CA

/C=IL/O=StartCom Ltd./OU=安全数字证书签名/CN=StartCom 认证机构

...让我回想起“WTF?”

答案1

是的,我正在回答我自己的问题。

解决了。

事实证明,这KeyUsage keyEncipherment不是 SSL/TLS 客户端的正确 keyUsage。正确的 KeyUsage 约束是KeyUsage digitalSignature;有用的信息在这篇 Mozilla 文章

相关内容