通常对于虚拟主机,ssl 是使用以下指令设置的:
Listen 443
SSLCertificateFile /home/web/certs/domain1.public.crt
SSLCertificateKeyFile /home/web/certs/domain1.private.key
SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt
Run Code Online (Sandbox Code Playgroud)
来自: 对于具有多个虚拟主机的服务器上的单个域启用 SSL,此配置是否有效?
SSLCertificateFile
和 和有SSLCertificateChainFile
什么区别?客户已从 GoDaddy 购买了 CA 密钥。看起来 GoDaddy 只提供一个SSLCertificateFile
(.crt 文件)和一个 SSLCertificateKeyFile(.key 文件)而不是SSLCertificateChainFile
.
如果没有SSLCertificateChainFile
指定路径,我的 ssl 仍然可以工作吗?
另外,是否有应该放置这些文件的规范路径?
Sha*_*den 61
严格来说,您永远不需要 SSL 链来运行。
什么,你总是需要的是SSLCertificateFile
一个SSLCertificateKeyFile
包含该证书正确的密钥。
问题是,如果您提供给 Apache 的只是证书,那么它必须提供给连接客户端的只是证书 - 这并不能说明有关该 SSL 证书的全部内容。它是说,“我被某人签了名,但我不会告诉你他们的事”。
这通常工作正常,因为大多数客户端系统都有大量 CA 证书(根证书和中间证书),它可以检查匹配的签名关系以建立信任。但是,有时这不起作用;大多数情况下,您遇到的问题是客户端不持有为您的证书签名的中间 CA 的证书。
这就是链条的用武之地;它让 Apache 可以准确地向客户端显示信任关系的样子,这可以帮助客户端填补您的证书、他们信任的根以及他们不知道的中间人之间的空白。该链可以通过以下两种方式之一包含在您的配置中:
SSLCertificateFile
,设置的同一个文件中,在服务器证书之后的新行中(根应该在底部)。如果您像这样设置它,您将需要SSLCertificateChainFile
指向与SSLCertificateFile
.SSLCertificateChainFile
指令中配置的单独文件中;颁发服务器证书的 CA 证书应该是文件中的第一个证书,然后是根目录中的任何其他证书。检查您现在拥有的证书文件 - 我敢打赌它没有包含链数据。这通常工作正常,但最终会导致某些浏览器或其他浏览器出现问题。