【问题标题】:Can't verify certificate signed by own CA无法验证自己的 CA 签署的证书
【发布时间】:2016-11-24 17:47:55
【问题描述】:

我们希望一个新的 WebService 通过 HTTPS 连接,并且我们希望为此设置服务器证书。我正在尝试详细解释我到目前为止一直在执行的步骤:

  1. 我们使用以下命令创建了服务器证书:

    keytool -storepass * -keystore .my_keystore -keypass * -genkey -alias ALIAS -dname "CN=[FQDN here], OU=ID, O=*, L=*, ST=*, C=*" -keyalg RSA -keysize 2048 -validity 3000
    
  2. 我们为证书生成了一个签名请求

    keytool -storepass * -keystore .my_keystore -certreq -alias ALIAS -file ALIAS.csr
    
  3. 我们将 CSR 发送到我们公司(有自己的 CA),并获得了签名证书。

  4. 我们验证了证书:

    openssl verify -CAfile CA_certificate.pem ALIAS_SIGNED.pem
    

    ALIAS_SIGNED.pem:好的

  5. 我们已在我们的密钥库中导入此签名证书。

    keytool -importcert -keystore .my_keystore -alias ALIAS_SIGNED -file ALIAS_SIGNED.pem -storepass *
    
  6. 我们正在尝试从另一台机器上连接,该机器的 CA 证书安装在 Java 的 cacerts 文件中:

    $ openssl s_client -connect [IP]:[port]
    CONNECTED(00000003)
    depth=0 /C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]
    verify error:num=18:self signed certificate
    verify return:1
    depth=0 /C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]
    verify return:1
    Certificate chain
     0 s:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]
       i:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]
    Server certificate
    -----BEGIN CERTIFICATE-----
    ABcDefGHI...z
    -----END CERTIFICATE-----
    subject=/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]
    issuer=/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]
    No client certificate CA names sent
    SSL handshake has read 1610 bytes and written 279 bytes
    New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : TLSv1
        Cipher    : EDH-RSA-DES-CBC3-SHA
        Session-ID: 5790...EAB54
        Session-ID-ctx: 
        Master-Key: D07...3E13
        Key-Arg   : None
        Start Time: 1369086263
        Timeout   : 300 (sec)
        Verify return code: 18 (self signed certificate)
    closed
    

但我得到的只是这个错误。我已尝试在任何可能的密钥库中安装所有可能的证书(CA、已签名和未签名),但 openssl 客户端并未对其进行验证。

请给点提示好吗?

对不起,如果这里有任何不一致(例如混合keytool和openssl):我们是这方面的新手,经过多天的努力,还没有找到任何可行的解决方案。

【问题讨论】:

  • “我们将 CSR 发送给我们的公司(拥有自己的 CA),并获得了签名证书....” - 您的公司应该拒绝 CSR 或修复了生成的证书。 不要将主机名放在Common Name (CN)中;将它们放在 Subject Alternate Name (SAN) 中。另请参阅How do you sign Certificate Signing Request with your Certification Authority?How to create a self-signed certificate with openssl? 您的s_client 问题是另一个问题;使用-CAfile 修复它。
  • 首先,谢谢。关于这一点,在返回的签名证书中,关于颁发者和主题的信息是 OK:Owner: CN=[FQDN here], O=[CA ROOT HERE] Issuer: O=[CA ROOT HERE] 并且 CAfile 正在要求一个私钥,我看不到我在哪里生成它。
  • 这是使用 CA 信息更新 s_client 指令的结果:同样的错误:$ openssl s_client -connect [HOST]:[PORT] -CAfile ca_exported.pem ... depth=0 C = *, ST = *, L = *, O = *, OU = ID, CN = [FQDN here] verify error:num=18:self signed certificate verify return:1 Certificate chain 0 s:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] i:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]... Verify return code: 18 (self signed certificate)
  • 问题可能出在服务器证书的创建方式上吗?
  • 我们无法判断问题出在哪里。没有足够的信息,因为主机名、主题和发行者等信息已被删除。而且您还没有提供任何代码。我们能为你做的不多。我们能做的就是关闭问题。

标签: ssl https openssl keytool


【解决方案1】:

别名应与 FQDN 匹配。

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 2010-10-16
    • 2016-04-02
    • 2021-01-29
    • 1970-01-01
    • 2012-07-20
    • 2021-01-09
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多