在 Qualys SSL 测试中总是警告我根证书是额外下载的,可以安全删除。
然而,从 Comodo 网站来看,他们在 nginx 上安装证书的指南是
NGINX Needed for this task: * PEM encoded certificates (Root, Intermediate(s) and
Domain/Device) COMBINE (CONCATENATE) MULTIPLE CERTIFICATES INTO ONE FILE
你知道,他们是 CA,是可信的答案。那么,我应该相信哪一个?
更新:我也从其他 CA 那里收集了更多建议
建议添加根证书
- https://support.globalsign.com/customer/portal/articles/1290470-install-certificate---nginx
- https://support.comodo.com/index.php?/Knowledgebase/List/Index/37/certificate-installation
- https://www.namecheap.com/support/knowledgebase/article.aspx/9419/0/nginx
建议不需要根证书
- https://www.digicert.com/ssl-certificate-installation-nginx.htm
- https://www.geocerts.com/install/nginx
- https://www.ssllabs.com/ssltest/
这么令人困惑吗?
答案1
Qualys SSL 测试和 Comodo 均正确。从服务器端代码角度来看,Comodo 是正确的。Nginx 应该信任它使用的证书。
另一方面,从网络协议的角度来看,Qualys SSL 测试是正确的。在 SSL 协商期间,服务器必须发送自己的 SSL 证书以及除根证书之外的所有中间 CA 证书。参考自RFC 5246§7.4.2:
certificate_list 这是证书序列(链)。发送者的证书必须位于列表的首位。每个后续证书必须直接认证其前一个证书。由于证书验证要求独立分发根密钥,因此可以从链中省略指定根证书颁发机构的自签名证书,前提是远程端必须已经拥有该证书才能在任何情况下对其进行验证。
答案2
证书链验证的要点在于您拥有本地受信任的(根)证书,并且从那时起您将信任推迟到对等方发送的证书。因此,服务器应仅发送叶证书和构建从本地根证书到叶证书的信任链所需的中间证书。这意味着您不应该发送根证书,但如果您不发送,它通常会被忽略。
并且您应确保以正确的顺序添加证书,即首先添加叶证书,然后以正确的签名顺序添加链证书。某些服务器或客户端可能会绕过错误的顺序,但您不应依赖它。