我有一个ROOT_CA和一个subCA。subCA为一个网站(CUPS1.local)颁发了一个证书。此外,我还有Windows客户端;ROOT_CA已经作为受信任的根证书颁发机构安装。
使用subCA验证openssl verify工作,我也可以在Windows中看到它。
我还可以在openssl中验证CUPS1.local的证书
openssl verify -CAfile /etc/certs/cacert.pem -untrusted subCA_websites.crt cups1.crt
cups1.crt: OK此外,如果我创建一个链,证书也是可以的。
cat /etc/certs/cacert.pem subCA_websites.crt > chain.pem
openssl verify -CAfile chain.pem cups1.crt
cups1.crt: OK现在,我还希望Windows将这些证书视为有效证书。问题是: Windows没有看到证书链:

但是,在安装了subCA的证书之后,CUPS1.local的证书是有效的。

因此,可能我误解了一些基本知识:是否需要将每个subCA的证书安装为受信任的根证书颁发机构?是否有另一种方法将证书链实现到CUPS1.local的证书中,这样我只需要安装ROOT_CA而不是所有的子to?
简短更新:由于证书是为一个网站(CUPS服务器)设计的,因此该链通过合并来工作:
cat cups1.crt subCA_websites.crt /etc/certs/cacert.pem > chain.crt当我将这个chain.crt添加到CUPS服务器(以及密钥文件)时,我可以打开网站,而不会出现错误消息。我不需要安装subCA证书,只有ROOT_CA才行。
不管怎样,出于好奇,我想了解一下windows是否也能以某种方式读取链子?
发布于 2021-04-17 12:17:55
是否需要将每个subCA的证书安装为受信任的根证书颁发机构?
否,只将根CA证书安装到受信任的根CA存储区。中间CA证书转到中间CA存储区。
是否有另一种方法将证书链实现到CUPS1.local的证书中,这样我只需要安装ROOT_CA而不是所有的子to?
是的,只要在CA和CA颁发的证书中实现权限信息访问就可以获得所有所需的证书。
不管怎样,出于好奇,我想了解一下windows是否也能以某种方式读取链子?
Windows完全支持X.509链,但是它的实现与Linux中的实现略有不同。Windows不支持文件中连接的多个PEM证书。相反,必须通过以下方式提供其他证书:
发布于 2021-04-17 12:17:37
不管怎样,出于好奇,我想了解一下windows是否也能以某种方式读取链子?
没有“不知何故读到锁链”。它要么有必要的链证书,要么没有。如果证书是预先提供的(即安装在本地),或者是在验证过程中提供的,那么它就可以拥有证书。后者是常见的情况,即在TLS握手期间,web服务器实际上提供了所有必要的链证书和服务器证书。
如果缺少链证书,一些实现可能会尝试填写丢失的链证书以进行验证。例如,Firefox缓存过去网站上看到的链证书,然后尝试使用这些缓存的证书来填充丢失的链证书。这对于公共网站非常有效,因为受信任的根CA只使用一小部分链证书。Chrome还试图从证书中的授权信息访问( Authority Information Access ) CA颁发机构信息中提取缺失链证书的URL,然后从给定的URL中加载缺失的颁发者证书。
https://security.stackexchange.com/questions/248405
复制相似问题