为了让我的计算机验证某个证书的身份,它是否应该拥有直到根证书的所有证书?
证书链
信息安全
密码学
证书
公钥基础设施
2021-09-04 18:40:23
3个回答
证书验证需要处理从信任锚(“根证书”)到要验证的证书的整个链。因此,您的计算机在某些时候必须具有中间 CA 证书。
这并不意味着您的计算机必须存储这些 CA 证书。处理证书的协议通常包括一些规定,以传达包括中间 CA 证书的一堆“帮助对象”。例如,在SSL/TLS中,服务器发送它的证书以及一堆其他证书,这些证书应该是客户端可以用来验证服务器证书的中间 CA 证书。因此,客户端可以在需要时访问所需的 CA 证书。
保留中间 CA 证书的本地缓存仍然是一个好主意,尤其是在存储比网络带宽便宜的现代计算机上。
根据RFC 2549第 3.2 节,在 X.509 下,签署服务器证书的证书颁发机构 (CA) 可能已经存储在客户端计算机上——如果不是,CA 的证书将需要由另一个 CA 签署,依此类推,直到链到达其公钥存储在客户端计算机上的 CA。那通常是根证书。
然而,在大多数 X.509 实现中,没有什么可以阻止您存储自签名证书,或者没有连接到像 Verisign 这样的“根 CA”的证书,然后使用它来验证服务器的真实性。
好的,答案很长:
- 简单的方法 - 如果您只是检查证书是否来自受信任的颁发者,那么您只需要可能为您颁发证书的 CA 集合。这种方法既快速又简单,但它消除了典型的最佳实践,例如证书状态检查。
- 正确的方法 - 在有更高风险或要求更好地检查站点的地方应该(至少) - 重建证书路径,根据证书状态机制(CRL 或 OCSP)检查除根以外的每个证书,验证有效日期每个证书。
如果您想以正确的方式进行操作,您应该让每个 CA 参与构建任何可用于颁发用于身份验证的证书的证书。当我说“重建证书路径”时,我的意思是检查证书上的签名是否与颁发者的公钥匹配,并且颁发者的签名与其颁发者的公钥匹配等等,直到你点击签名与自己的公钥匹配的根证书。
您永远不需要存储最终实体证书。