在nginx上设置SSL证书时,是否需要提供根证书?

在Qualys SSLtesting中,总是警告我,根证书是一个额外的下载,可以安全地删除。

但是,从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的更多build议

build议添加根证书

  • 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

build议不需要根证书

  • https://www.digicert.com/ssl-certificate-installation-nginx.htm
  • https://www.geocerts.com/install/nginx
  • https://www.ssllabs.com/ssltest/

这么混乱?

Qualys SSLtesting和Comodo都是正确的。 Comodo从服务器端的angular度来看是正确的。 Nginx应该信任它使用的证书。

另一方面,Qualys SSLtesting从networking协议的angular度来看是正确的。 在SSL协商期间,服务器必须发送自己的SSL证书和除根证书以外的所有中间CA证书。 RFC 5246§7.4.2的参考:

certificate_list这是证书的序列(链)。 发送者的证书必须在列表中首先出现。 以下每个证书都必须直接certificate前面的证书。 由于证书validation要求根密钥是独立分发的,因此假定远程terminal必须已经拥有它,以便在任何情况下validation它,则可以从链中省略指定根证书颁发机构的自签名证书。

证书链validation的重点在于您拥有本地信任的(根)证书,并且您将信任推迟给对等方发送的证书。 所以服务器只应该把叶证书和build立信任链所需的中间证书从本地根证书发送到叶证书。 这意味着你不应该发送根证书,但如果你不这样做,通常会被忽略。

而且你应该确保你以正确的顺序添加证书,即首先是叶证书,然后是正确的签署顺序的链证书。 有些服务器或客户端可能会绕错误的顺序工作,但不应该依靠它。