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