SSLCertificateFile和SSLCertificateChainFile之间的区别?

通常情况下,使用虚拟主机,ssl将使用以下指令进行设置:

Listen 443 SSLCertificateFile /home/web/certs/domain1.public.crt SSLCertificateKeyFile /home/web/certs/domain1.private.key SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt 

发件人: 对于启用具有多个虚拟主机的服务器上单个域的SSL,此configuration是否可用?

SSLCertificateFileSSLCertificateChainFile什么SSLCertificateChainFile ? 客户已经从GoDaddy购买了一个CA密钥。 它看起来像GoDaddy只提供一个SSLCertificateFile (.crt文件)和一个SSLCertificateKeyFile(.key文件),而不是在SSLCertificateChainFile

如果没有指定SSLCertificateChainFilepath,我的ssl仍然可以工作吗?

另外,是否有一个规范的path放置这些文件?

严格地说,你永远不需要SSL链function。

你总是需要一个SSLCertificateFileSSLCertificateKeyFile包含该证书的正确密钥。

麻烦的是,如果你给Apache的所有东西都是证书,那么连接客户端的所有东西就是证书 – 这并不能说明SSL证书的全部内容。 它是说,“我是由某人签名的,但我不会告诉你关于他们的事情”。

这通常可以正常工作,因为大多数客户端系统都有大量的CA证书(包括根证书和中间证书),它们可以检查匹配的签名关系以build立信任。 但是,有时这是行不通的。 大多数情况下,您遇到的问题是客户端不具有签名证书的中间CA的证书。

这就是链条进入的地方; 它可以让Apache向客户端准确地显示信任关系的样子,这可以帮助客户填写他们所信任的根证书和他们不知道的中间人之间的空白。 链可以通过以下两种方式之一包含在您的configuration中:

  • embedded在您为SSLCertificateFile设置的相同文件中,在服务器证书顺序(根位于底部)之后的新行中。 如果你这样设置,你需要SSLCertificateChainFile指向与SSLCertificateChainFile完全相同的文件。
  • SSLCertificateChainFile指令中configuration的单独文件中; 颁发服务器证书的CA证书应该先在文件中,其次是根文件中的其他证书。

检查您现在拥有的证书文件 – 我打赌它没有包含链式数据。 这通常工作正常,但最终会导致一些浏览器或其他问题。

这里有一个相当不错的解释,以及select一个和另一个之间的差异以及可观察到的影响:

https://stackoverflow.com/questions/1899983/difference-between-sslcacertificatefile-and-sslcertificatechainfile

其实,GoDaddy确实给你一个中间链:

http://support.godaddy.com/help/5238

这里有更多的讨论。

http://support.godaddy.com/help/868/what-is-an-intermediate-certificate

GoDaddy的电子邮件告诉你如何下载你的新证书也将有关于中间证书文件的信息。 这可能是在你的眼睛从字面上翻上来,然后向上销售。

就如果不包含正确的SSLCertificateChainFile指令将会发生什么情况而言:您将在浏览器中看到一个巨大的红色警告,因为您的SSL站点不会在浏览器中进行validation,因为它们无法遵循您网站的证书链证书给浏览器知道的证书颁发机构拥有的证书。

我想添加到以前关于SSLCertificateChainFile良好的答案,该文件中的证书的顺序也是重要的。 基于OpenSSL的客户端会自行整理订单,但是基于gnutls的客户端会因为订单不正确而链接失败。

像gnutls-cli一样testing订购

 gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p https wwwsec.cs.uu.nl 

/etc/ssl/certs/ca-certificates.crt是您的发行版放置组合证书的位置。