Total Pageviews

Saturday, 3 January 2015

浏览器不信任 SSL 证书和 SSL 证书链配置的问题

当申请到 SSL 证书时,通常会收到以下几个文件(以 AlphaSSL 作为示例):
数量和名称 简称 其他说明
1 个 RootCA.crt rCA 被信任的根证书
1 个 IntermediateCA.crt mCA 某些厂商有多个中间证书
1 个 hub.moe.crt sCA 通过CSR签下来的证书
1 个 hub.moe.key sKey 生成CSR时获得的密钥文件

在 Nginx 中配置 SSL 证书的时候,需要添加一个证书和一个密钥文件。而收到的文件中有三个证书和一个密钥文件,这样就需要对证书进行合并。某些厂商的 rCA 和 mCA 是需要用户自己下载的,一些用户没有下载进行证书的合并,直接把 sCA 和 sKey 添加到 Nginx 中,这样会出现某些浏览器不信任 SSL 证书的问题。可以在 SSL LABS 中 检测服务器上的证书链是否完整,如果证书链不完整,你会看到检测结果中的 Chain issues 一项为 Incomplete,并且呈现黄色。此外,如果在合并证书的时候,把 rCA 也合并在里面,会出现证书链包含不必要锚点的警告,当然浏览器是不会出现警告提示的。
ssl_status
SSL 证书正确的合并方法是把 mCA 合并到 sCA 中。当有多个 mCA 文件时,mCA 从下级到上级(根证书为最上级)依次合并到 sCA 中。在这个过程中,rCA 被视为多余的文件,可以参考 AlphaSSL 官网的说明。
Root CA – this root CA certificate does not need to be installed on your webserver.(Roor CA 不需要安装在服务器上)
# 多个 mCA 合并完成的文件(示例)
# 证书从上向下依次是:sCA、mCA(下级)、mCA(上级)

-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEw
......
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEw
......
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEw
......
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
以上就是证书完成合并后的文件了,通常称为证书链。
在 DirectAdmin 面板中安装 SSL 证书与在 Nginx 中配置 SSL 证书稍有不同。
directadmin
上图是 DirectAdmin 面板中 SSL 配置界面的一张截图,sKey 和 sCA 是保存①中的,而 mCA 则是保存在②那里(多个 mCA 依次粘贴在里面即可)。
补充一下 Apache 的证书配置,具体看下面的这张图片。
ssl_apache
SSLCertificateKeyFile    # sKey 的路径
SSLCertificateFile       # sCA  的路径
SSLCertificateChainFile  # mCA  的路径
SSLCACertificateFile     # rCA  的路径
Apache 的证书配置就是这样,官方的配置文件中有示例,而且每个文件都是分开配置的,看起来很明了。当然,如果你的证书有多个 mCA,还是需要对这些 mCA 进行合并的.