openssl是否拒绝没有基本约束的自签名证书?

cgvd09ve  于 2023-04-30  发布在  其他
关注(0)|答案(2)|浏览(199)

我有两个非常相似的自签名证书,通过两种不同的方法生成。
为了测试它们,我有:
1.在我的主机文件中为www.example添加了一个条目 www.example.com
1.设置一个nginx服务器在端口443上监听该域,使用测试中的证书和相关的私钥(然后我切换证书并重新启动nginx进行比较)
1.通过openssl s_client -connect local.mydomain.com -CAfile /path/to/the/ca/cert.pem连接nginx
一个证书失败:

CONNECTED(00000003)
depth=0 CN = local.mydomain.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = local.mydomain.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/CN=local.mydomain.com
   i:/CN=local.mydomain.com
---

一个证书成功:

CONNECTED(00000003)
depth=0 CN = local.mydomain.com
verify return:1
---
Certificate chain
 0 s:/CN = local.mydomain.com
   i:/CN = local.mydomain.com
---

我将证书的详细信息与openssl x509 -in /path/to/the/ca/cert.pem -text -noout进行比较
失败证书:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            47:dc:02:c7:11:fc:8e:96:45:22:aa:6b:23:79:32:ca
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=local.mydomain.com
        Validity
            Not Before: Nov 18 11:55:31 2016 GMT
            Not After : Nov 18 12:15:31 2017 GMT
        Subject: CN=local.mydomain.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    <stuff>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Subject Alternative Name:
                DNS:local.mydomain.com
            X509v3 Subject Key Identifier:
                6D:4F:AF:E4:60:23:72:E5:83:27:91:7D:1D:5F:E9:7C:D9:B6:00:2A
    Signature Algorithm: sha256WithRSAEncryption
         <stuff>

工作证书:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            9b:6b:3d:a3:b9:a3:a4:b4
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=local.mydomain.com
        Validity
            Not Before: Nov 19 13:27:30 2016 GMT
            Not After : Nov 19 13:27:30 2017 GMT
        Subject: CN=local.mydomain.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    <stuff>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                03:E7:DA:AA:2E:CC:23:ED:C5:07:3D:E1:33:86:F5:22:D4:76:EB:CB
            X509v3 Authority Key Identifier:
                keyid:03:E7:DA:AA:2E:CC:23:ED:C5:07:3D:E1:33:86:F5:22:D4:76:EB:CB

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         57<stuff>

从这个Angular 看,最明显的区别是工作证书在X509v3 Basic Constraints下有CA:TRUE。然而,从网上阅读,我的印象是,自我签署的证书并不意味着是CA,特别是这说,他们通常不会:
https://security.stackexchange.com/questions/44340/basic-self-signed-certificate-questions
那里的答案是自签名,不涉及CA。但是也许openssl需要自签名证书才能有这样的设置?

wlsrxk51

wlsrxk511#

从我自己的实验中,我可以证实你所看到的。我对这种行为的解释是,自签名证书仍然是由颁发者签名的证书,即使颁发者的证书是证书本身。但是只有CA证书才能用于签署证书,即。也就是说,这正是CA:true所允许的约束。这意味着自签名证书还需要是具有约束CA:true的CA证书。

wz3gfoph

wz3gfoph2#

RFC5280说:
CA布尔值指示经认证的公钥是否可用于验证证书签名。
因此,如果您的证书没有CA:TRUE标志,则此证书可能无法用于验证任何证书上的签名,包括其本身。OpenSSL正确遵循RFC。
认为证书属于两种类型之一是不正确的,要么是“CA证书”,要么是“终端实体证书”。具有CA:TRUE的证书可用于对实体进行身份验证。这正是您在使用自签名证书进行身份验证时要做的事情。它也可以是由其他人签名的CA:TRUE证书。

相关问题