【发布时间】:2020-05-05 17:07:33
【问题描述】:
给定 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
是不是因为在 TLS 握手期间中间 CA 出现在服务器链中?还是链中的所有证书都必须由受信任的机构直接或传递地签名?
我验证了中间 CA 在Basic Constraints 属性中设置了Is a Certification Authority。
也许受信任的 CA 必须是自签名的,而中间 CA 则不然。
【问题讨论】:
-
这可能会有所帮助:crypto.stackexchange.com/questions/63907/… 但否则你的问题在这里与编程无关。
-
"是不是因为在 TLS 握手时中间 CA 出现在了服务器链中?"服务器必须提供证书链。他们只允许跳过根目录,因为无论如何客户端都应该在自己的信任库中拥有它。
-
“或者链中的所有证书都必须由受信任的机构直接或传递地签名吗?”如果你有一个证书链,这意味着每个证书都由“前一个”证书签名,这样你就有了一个完整的链接,即一个链。根据您查看的方向,其中一个将由最终受客户端信任的根 CA 签名,其中一个(相同或另一个,取决于中间链是否只有一个或多个证书)将签名最终用户证书。这样您就拥有了从受信任的 CA 到端点证书的完整链。
-
@PatrickMevzek 是的,我知道这个理论,但是将中间 CA 指向客户端最终受信任有什么问题?
标签: ssl curl openssl ssl-certificate x509certificate