SSLCA证书文件和SSLCertificateChain文件的区别

86
我在我的网页服务器上提供SSL页面,我有一个问题。 SSLCACertificateFile 和 SSLCertificateChainFile 有什么区别?当我使用SSLCertificateChainFile时,日本手机浏览器会出现警告,但是当我使用PC浏览器(如IE,FF)时,没有任何问题。另一方面,SSLCACertificateFile 没有对两种浏览器造成任何问题。当浏览器连接到Apache时是否有任何不同?

1
根证书未在移动电话的根存储中,这是常见情况。 - user373557
2个回答

80

SSLCertificateChainFile曾经是选择正确的选项,但是从Apache 2.4.8开始,此指令已经过时。该指令将列出的文件与证书一起发送给连接的任何客户端。

SSLCACertificateFile(以下简称"CACert")替代了SSLCertificateChainFile(以下简称"Chain"),并且还允许使用相关证书签署客户端证书。这种身份验证方式目前相当少见,如果您没有使用它,则没有理由使用CACert来增强其功能。另一方面,有人可能会认为增加的功能也没有什么害处,而CACert则涵盖了所有情况。这两种观点都是合理的。

不用说,如果您询问证书供应商,他们总是会推荐CACert而不是Chain,因为这给他们提供了另一个可以在未来潜在销售给您的东西(客户端证书)。 ;)


1
另一个需要考虑的是算法。但要小心:提供证书链只适用于使用单个(RSA或DSA)服务器证书的情况。如果您使用了RSA+DSA证书对,那么只有在实际上两个证书都使用相同的证书链时才能正常工作。否则,浏览器将会在这种情况下感到困惑。 - Eddie
@Eddie 说得对,但我认为值得一提的是这会对两个选项产生同等的影响。另外,DSA 证书(幸好)已经非常少见了。 - BMDan

22

实际上,这两种方法都是有效的选择。

使用 SSLCertificateChainFile 来发布由公共证书颁发机构 (VeriSign、RapidSSL 等) 签署的证书。

使用 SSLCACertificateFile 提供您的“私有” CA,这个 CA 可以颁发客户端证书,您可以将这些证书分发给一些特定用户。与基本密码认证相比,这些客户端证书实际上非常适合进行身份验证,并且通常不需要由公共 CA 分发 (因此您可以节省一些钱)。

因此,如果您想要在网站的某个部分添加安全授权,请执行以下操作:

<Directory /var/www/html/authorized>
  SSLVerifyClient require
  SSLVerifyDepth  5

  SSLOptions +StrictRequire
  SSLUserName SSL_CLIENT_S_DN_CN
  SSLRequireSSL
</Directory>

简单说明一下,SSLUserName SSL_CLIENT_S_DN_CN 将把已认证用户的名称设置为证书的通用名称(CommonName),而不是整个 x509 '/OU=Foo/CN=...' 主题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接