我正在升级我的 Apache Web 服务器并想知道是否需要在 vhost 配置中声明一个 CA 文件?
我的虚拟主机设置是
SSLEngine on
SSLCertificateFile /home/user/ssl/${SITE}-cert.pem
SSLCertificateKeyFile /home/user/ssl/${SITE}-key.pem
SSLCertificateChainFile /home/user/ssl/${SITE}-ca.pem
#SSLCACertificateFile /home/user/ssl/${SITE}-ca.pem
默认情况下,Apache 仅附带SSLCertificateFile
和SSLCertificateKeyFile
active。与 Debian 的软件包相同。这两个我都懂。
默认情况下,Apache 的源代码和 Debian 的软件包都禁用 和SSLCertificateChainFile
。SSLCACertificateFile
我以为我理解了这些,但现在不太确定。
我所有的网站都可以在CA
禁用这两个指令的情况下正常工作。
但我错过了什么吗?禁用它们是否会导致我的服务器在后台提供 CA,例如来自系统的 /etc/ssl/certs?
Let's Encrypt 在续订期间提供他们的 CA 文件,所以我认为指定SSLCertificateChainFile
.
难道这两个 CA 指令与从 Mozilla 获取的 cURL 的 CA-bundle 文件的目的相似吗?我可以SSLCACertificateFile
在我的服务器上指向它并收工吗?
据我了解,客户负责使用其自己的授权 CA 来验证网站的证书。我错了吗?
文档似乎没有提供任何见解:
首先,将中间链与您的服务器响应一起发送到根证书并不总是完全需要的,但这是推荐的做法。
如今,许多客户端都将各种中间证书存储在其证书信任库中,或者从操作系统信任库中获取它们。但是,如果您打算为普通公众服务,则不能对此做出任何假设,并且您应该将中间链与您的响应一起发送。
如果您不发送中间链,您将收到关于人们无法连接到您的服务的零星报告。这可能取决于他们的浏览器、浏览器版本和底层操作系统。
具有讽刺意味的是,选择特定的中间链并将其与响应一起发送有时可能会中止某些客户端的 SSL 验证,这些客户端本来可以从某些存储链本身对其进行验证。就像服务器上一些较旧的 openssl 客户端和 letencrypt 颁发的证书一样,但您可以假设在这种情况下,这些服务器的支持最终会解决。
实际上,您本身并不需要 Apache 中的 ChainFile 指令,因为您还可以将 pem 证书文件从最终证书连接到根目录,并将它们与 SSLCertificateFile 指令一起使用。
您不需要做的是发送根证书。因为如果客户端实际使用它,它将破坏 SSL 验证的实际使用。
SSLCACertificateFile
当且仅当您需要验证来自连接到您的客户端的证书并且您不想为此使用系统底层信任库时才需要。所以,这实际上是一个完全不同的用途,然后SSLCertificateChainfile
此外,如果有疑问,请使用 Qualys SSL Labs 的出色验证工具:https ://www.ssllabs.com/ssltest/
如果需要针对此 CA 验证证书,则需要 CA 文件。在像 Apache 这样的 SSL 服务器的上下文中,这对于验证客户端证书和在 OCSP 装订上下文中验证 OCSP 响应是必要的。如果这些都不需要,则不需要提供 CA 文件。如果需要其中任何一项,但应针对系统默认 CA 进行验证,则也无需提供 CA 文件。