导入根存储的非自签名证书是否需要(自签名)颁发者也导入根存储?
假设我有一个A由另一个证书签名的证书B。那么仅导入A根存储就足够了,即证书验证在 停止A,或者B还应该导入根存储以进行正确的证书验证?
我问这个问题的原因是我遇到了不同产品(例如网络浏览器或系统)的不同结果,所以我想知道正确的方法。
导入根存储的非自签名证书是否需要(自签名)颁发者也导入根存储?
假设我有一个A由另一个证书签名的证书B。那么仅导入A根存储就足够了,即证书验证在 停止A,或者B还应该导入根存储以进行正确的证书验证?
我问这个问题的原因是我遇到了不同产品(例如网络浏览器或系统)的不同结果,所以我想知道正确的方法。
您应该在信任库中包含 Cert B。正如评论中提到的,您的里程可能会随着客户端和服务器的不同实现 RFC 而有所不同。
在规则方面,x.509 证书的规范在 IETF RFC 5280中。关键信息是,为了发生 SSL 握手,客户端应该进行完整的证书链验证,最终得到一个自签名证书,该证书位于您的信任库中。
您的证书不是自签名的,它是由不同的 CA(证书 B)颁发的。如果您的信任库中没有 B,则信任链已损坏。但是,再次如上所述,客户端可能不会验证完整的证书链。
这样想吧。您的客户会收到由“B”签名的证书 A。客户应验证 A 上的签名是否正常,这意味着它需要(证书)“B”。如果 B 是“根”CA 或自签名,则其“颁发者”和“主题”字段将匹配。如果证书 B 在您的 TrustStore 中,那么您就是黄金。
服务器的工作是向您发送TLS 的证书列表。
这是证书的序列(链)。发件人的证书必须在列表中排在第一位。后面的每个证书必须直接证明它前面的证书。
这里有证书链验证的可视化表示。希望能帮助到你。