我可能对如何设置服务器以及在服务器 hello 证书消息期间实际发送的证书有错误的印象。我今天从 Symantec/VeriSign 遇到了这个问题:
根安装在服务器上。为获得最佳实践,请从服务器中删除自签名根。证书包应该只包含证书的公钥,以及任何中间证书颁发机构的公钥。浏览器将仅信任解析为已在其信任存储中的根的证书,它们将忽略证书包中发送的根证书(否则,任何人都可以发送任何根)。
如果这是真的,并且不需要在服务器上安装根证书,那么我认为我知道正确的服务器设置以及如何将链验证回根。再一次,当我回顾这个问题时,在Thomas Pornin 的答案的证书和身份验证部分下,它说:
因此,客户端应该执行以下操作:
- 获取以服务器证书结尾的证书链。来自服务器的证书消息应该准确地包含这样一个链。
这与上面的 Symantec/VeriSign 消息几乎相反,除非我误解了某些东西。所以:
服务器是否需要安装完整的链,包括根?如果不是,浏览器使用什么来比较验证,因为服务器在握手期间不会提供其根证书?它只是查看身份证书并从那里获取吗?(比如在您的本地机器上打开一个身份证书,并在证书路径中看到完整的链?)
同样,如果这是真的,那么使用 SSL 库的独立客户端应用程序呢?这是否取决于应用程序,因为它可能对受信任的根和浏览器有不同的路径构建方法?