当前位置: 首页 > 知识库问答 >
问题:

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

孟安民
2023-03-14

我有两个非常相似的自签名证书,通过两种不同的方法生成。

为了测试它们,我有:

  1. 在我的主机文件中为local.mydomain.com添加了一个条目
  2. 设置一个nginx服务器,用测试中的证书和相关的私钥监听端口443上的域(然后切换证书并重启nginx进行比较)
  3. 连接到nginx与openssls_client连接local.mydomain.com-CAfile /path/to/the/ca/cert.pem

一个证书失败:

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
---

我将证书的详细信息与opensslx509-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>

综上所述,最明显的区别是,工作证书在X509v3基本约束下具有CA:TRUE。然而,通过阅读网络,我有一种印象,即自签名证书并不意味着CA,特别是这表明它们通常不会:

https://security.stackexchange.com/questions/44340/basic-self-signed-certificate-questions

答案是,自签名不涉及CA。但也许openssl需要自签名证书才能设置该证书?


共有2个答案

广绪
2023-03-14

RFC5280表示:

因此,如果您的证书没有CA:TRUE标志,则此证书不能用于验证任何证书上的签名,包括证书本身。OpenSSL正确地遵循RFC。

认为证书属于“CA证书”或“最终实体证书”两种类型之一是不正确的。具有CA:TRUE的证书可用于验证实体。这正是使用自签名证书进行身份验证时所做的操作。它也可以是由其他人签名的带有CA:TRUE的证书。

夹谷星纬
2023-03-14

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

 类似资料:
  • 我试图使用Terraform创建一个自签名证书,以便在测试/开发环境中内部使用。 我首先创建一个CA私钥,自签名证书。 然后,为要启用HTTPS的内部域名创建证书签名请求和私钥。 然后我在证书上签字。以下是我使用的整个Terraform清单: 我查了Terraform舱单。然后我从状态文件中提取生成的证书并将它们保存到文件中。 我试图用openssl验证最终证书,但得到一个错误: 你知道问题出在哪

  • 我想创建一个签名并使用openssl验证它。我想有我的签名的十六进制输出。 这是我的密码 我得到这个错误: 如果我在创建签名的过程中删除了-hex,它就可以工作了。

  • 然后我查看认证: 但它有一个签名字段: 这个问题不是重复的: 甚至由此产生的CSR也有签名。

  • 我正在为嵌入式Linux设备添加HTTPS支持。我尝试通过以下步骤生成自签名证书: 这是可行的,但我得到一些错误,例如,谷歌Chrome:

  • 我正在编写一些代码,试图对一些数据进行签名。在将openssl生成的私钥转换为Java密钥库之后,我将Java签名类与SHA256withRSA一起使用。我试图确认openssl中Java类返回的签名,但由于某些原因,我无法让openssl进行验证。我最终需要在iOS Swift 3中实现这个签名验证,但在找到库之前,我想尝试根据openssl标准检查Java签名。 例如,我从我们的登录服务器得到