为什么使用中间CA时SSL连接失败?

问题描述 投票:0回答:1

给出stackoverflow.com证书链如下:

Builtin DST Root CA -> Let's encrypt intermediate CA -> *.stackexchange.com

是否可以使用中间CA作为可信CA进行TLS连接?

curl https://stackoverflow.com -v --cacert stack_intermediate_ca.pem --capath /dev/null -o /dev/null

curl: (60) SSL certificate problem: unable to get issuer certificate

是因为中间层CA在TLS握手期间出现在服务器链中?还是必须由受信任的机构直接或传递性地签名链中的所有证书?

我已验证中间CA在Is a Certification Authority属性中设置了Basic Constraints

也许受信任的CA必须是自签名的,中间CA却不是这种情况。

ssl curl openssl ssl-certificate x509certificate
1个回答
1
投票
传统上,openssl要求对整个链进行验证,即,直到自签名和本地信任的根证书为止。在openssl 1.0.2中添加了标志X509_V_FLAG_PARTIAL_CHAIN,该标志允许链验证以任意受信任的证书结束,而不管是否受信任的根。但是默认情况下,此行为是关闭的。

使用curl 7.68.0,curl默认情况下启用了此标志,因此,对于较新版本的curl和openssl,应该可以在--cacert中拥有链证书而不是自签名根证书。服务器是否将发送更多的链证书而不是验证链所需的证书,这并不重要,因为curl / openssl只会使用实际需要的证书。在Ubuntu 20.04上使用openssl 1.1.1在curl 7.68.0中进行了验证。

© www.soinside.com 2019 - 2024. All rights reserved.