只能在一个文件中使用中间证书和根证书来验证证书

时间:2019-09-25 07:24:37

标签: ssl ssl-certificate

我在SSL握手期间由服务器发送了两个证书,域证书和DigiCert Global Root CA签名的中间证书。我可以验证中间证书

# openssl verify intermediate.pem
cert2.pem: OK

但不是域证书

# openssl verify -CAfile intermediate.pem domain.pem
cert1.pem: C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
error 2 at 1 depth lookup:unable to get issuer certificate

DigiCert SHA2 Secure Server CA是中间证书。当我同时连接中间证书和根证书时,验证才有效

# openssl verify -CAfile combined.pem cert1.pem
cert1.pem: OK

根证书存在于/etc/ssl/certs/ca-bundle.crt中。该问题仅出现在docker容器上(基于centos 7),在主机上可以正常工作。由于此验证问题,SSL握手失败,并且与服务器的连接断开。我该怎么做才能解决此问题?

1 个答案:

答案 0 :(得分:2)

# openssl verify -CAfile intermediate.pem domain.pem
cert1.pem: C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
error 2 at 1 depth lookup:unable to get issuer certificate

openssl希望在信任根证书之前建立信任链。中间证书可能是受信任的,但不是根证书(非自签名)。这意味着默认情况下,如果没有提供根证书,验证将失败。

-partial_chain的较新版本中有一个选项openssl verify,即使它不是根证书,它也可以在以可信证书结尾的情况下成功进行验证。 OpenSSL库中有一个类似的选项X509_V_FLAG_PARTIAL_CHAIN。但这需要由应用程序显式启用,即默认情况下处于关闭状态。

  

根证书位于/etc/ssl/certs/ca-bundle.crt中。该问题仅出现在docker容器上(基于centos 7),在主机上可以正常工作。由于此验证问题,SSL握手失败,并且与服务器的连接断开。我该怎么做才能解决此问题?

不幸的是,不清楚根证书是否也是a)docker容器中的根证书,b)容器中具有哪种应用程序以及用于验证证书的代码是什么,以及c)服务器应用程序是否正确提供了所有中间证书。换句话说:您在openssl verify上看到的内容可能与您对未知应用程序的体验无关。