我正在升级我的 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
活动。Debian 的软件包也是如此。我理解这两个。
默认情况下,Apache 源和 Debian 包中的SSLCertificateChainFile
和均被禁用。我以为我理解了这些,但现在不太确定。SSLCACertificateFile
当禁用这两条指令时,我的所有网站都可以正常运行CA
。
但我是不是遗漏了什么?禁用这两者是否会导致我的服务器在后台提供 CA,例如从系统的 /etc/ssl/certs 提供?
Let's Encrypt 在续订期间提供了他们的 CA 文件,所以我认为指定它不会有什么坏处SSLCertificateChainFile
,但我想了解为什么我的网站在没有它的情况下也能运行?
这两条 CA 指令的作用难道不类似于cURL 的 CA-bundle 文件取自 Mozilla?我可以SSLCACertificateFile
在服务器上直接指出这一点然后就结束了吗?
据我了解,客户端使用其自己的授权 CA 来验证网站的证书。我错了吗?
文档似乎没有提供任何见解:
答案1
首先,将中间链与服务器响应一起发送到根证书并不总是完全正确的需要,但建议练习。
如今,许多客户端在其证书信任存储中存储了各种中间证书,或者从操作系统信任存储中获取这些证书。但是,如果您打算为普通公众提供服务,则不能对此做出任何假设,并且您应该将中间链与您的响应一起发送。
如果您不发送中间链,您将会收到人们无法连接到您的服务的零星报告。这可能取决于他们的浏览器、浏览器版本和底层操作系统。
讽刺的是,选择特定的中间链并将其与响应一起发送有时可能会中止某些客户端的 SSL 验证,因为这些客户端会自己从存储的链中验证它。就像服务器上的一些较旧的 openssl 客户端和 letsencrypt 颁发的证书的情况一样,但您可以假设在这种情况下,这些服务器的支持最终会弄清楚。
您实际上并不需要 Apache 中的 ChainFile 指令,因为您还可以将 pem 证书文件从最终证书连接到根证书,并仅使用 SSLCertificateFile 指令即可使用它们。
您不需要做的是发送根证书。因为如果客户端实际使用它,它将破坏 SSL 验证的实际用途。
SSLCACertificateFile
只有在您需要验证连接到您的客户端的证书并且您不想为此使用系统底层信任存储时才需要。因此,这实际上与SSLCertificateChainfile
此外,如果有疑问,请使用 Qualys SSL Labs 的优秀验证工具:https://www.ssllabs.com/ssltest/
答案2
如果需要根据此 CA 验证证书,则需要 CA 文件。在 Apache 等 SSL 服务器的上下文中,这对于验证客户端证书和在 OCSP 装订上下文中验证 OCSP 响应是必需的。如果这些都不需要,则无需提供 CA 文件。如果需要其中任何一项,但验证应针对系统默认 CA 进行,则也无需提供 CA 文件。