
一、什么是 SSL 证书链
有两种类型的证书颁发机构(CA):根 CA 和中间 CA。如果想让一个设备信任一个证书,必须保证该证书设备信任的 CA 颁发。
如果证书不是由受信任的 CA 签发的,则连接设备(例如,网页浏览器)将检查发行 CA 的证书是否由可信 CA 颁发,等等,直到找到可信 CA 为止 (此时将建立可信的安全连接),或者找不到可信的 CA(此时设备通常会显示错误)。
SSL 证书列表(从根证书到最终用户证书)代表 SSL 证书链。

(一)SSL 证书链举例
这是一个实际的例子。 假设您从 Awesome Authority 购买域 example.awesome
的证书。
Awesome Authority 不是根证书颁发机构。 换句话说,它的证书并不直接嵌入到您的 Web 浏览器中,因此它不能被明确信任。
- Awesome Authority 使用 Intermediate Awesome CA Alpha 颁发的证书
- Intermediate Awesome CA Alpha 使用 Intermediate Awesome CA Beta 颁发的证书
- Intermediate Awesome CA Beta 使用 Intermediate Awesome CA Gamma 颁发的证书
- Intermediate Awesome CA Gamma 使用 The King of Awesomeness 颁发的证书
- The King of Awesomeness 是根 CA,它的证书直接嵌入到您的 Web 浏览器中,因此可以显式信任它。
在我们的示例中,SSL 证书链由 6 个证书表示:
Name | End-user Certificate |
---|---|
Issued to | example.com |
Issued By | Awesome Authority |
Name | Intermediate Certificate 1 |
---|---|
Issued to | Awesome Authority |
Issued By | Intermediate Awesome CA Alpha |
Name | Intermediate Certificate 2 |
---|---|
Issued to | Intermediate Awesome CA Alpha |
Issued By | Intermediate Awesome CA Beta |
Name | Intermediate Certificate 3 |
---|---|
Issued to | Intermediate Awesome CA Beta |
Issued By | Intermediate Awesome CA Gamma |
Name | Intermediate Certificate 4 |
---|---|
Issued to | Intermediate Awesome CA Gamma |
Issued By | The King of Awesomeness |
Name | Root certificate |
---|---|
Issued by and to | The King of Awesomeness |
证书 1 是您的最终用户证书,即您从 CA 购买的证书。 从 2 到 5 的证书称为中间证书。 证书 6,即位于链条顶部的链接称为根证书。
当您为 example.awesome
安装最终用户证书时,必须捆绑所有中间证书并将它们与最终用户证书一起安装。 如果SSL证书链无效或损坏,则某些设备不会信任您的证书。
(二)FAQ
1、我必须在我的服务器上安装根证书吗?
不用。根证书通常嵌入您的连接设备中。 在 Web 浏览器的情况下,根证书与浏览器软件一起打包。
2、如何安装中级 SSL 证书(Intermediate SSL certificates)?
安装中级 SSL 证书的过程取决于 Web 服务器和安装证书的环境。
例如,Apache 要求您捆绑中间 SSL 证书,并将该包的位置指定给 SSLCertificateChainFile
配置项。 而 Nginx 要求您将中间 SSL 证书与最终用户证书打包在一个包中。
我们提供一个证书安装向导,其中包含多个服务器和平台的安装说明。 如果您向我们购买证书,您将能够使用此向导获取并安装服务器所需的文件。
如果您的服务器不在向导中,您仍然可以通过它获取正确的文件,然后按照 Web 服务器的文档来确定如何正确安装域证书和中间证书。
3、如果我不安装中级SSL证书会发生什么情况?
如果您未安装一个或多个中级 SSL 证书,则会破坏证书链。 这意味着您在特定(最终用户或中间)证书与其颁发者之间建立了缝隙。 当设备找不到证书的受信任颁发者时,证书和从中间证书直到最终证书的整个链都不可信。
因此,您的最终证书不会被信任。 Web浏览器将显示“无效证书”或“证书不可信”错误。
4、如何缩短浏览器中的SSL证书链?
这不可能。 缩短链条的唯一方法是将中间证书提升为根。 理想情况下,您应该推广代表您的证书颁发机构的证书,这样该链只包含两个证书。
但是,根证书与浏览器软件一起打包,如果不是来自浏览器维护人员,则不能更改该列表。
二、Nginx 中证书链的配置
某些浏览器可能会抱怨由非知名证书颁发机构签署的证书,而其他浏览器可能会接受证书而没有问题。 发生这种情况的原因,是颁发机构使用中间证书对服务器证书进行了签名,该中间证书不在与特定浏览器一起分发的知名的的受信任证书颁发机构的证书库中。 在这种情况下,权威机构提供一系列链接的证书,这些证书应连接到已签署的服务器证书。 服务器证书必须出现在组合文件中的链接证书之前:
$ cat www.example.com.crt bundle.crt > www.example.com.chained.crt
生成的文件应该在 ssl_certificate
指令中使用:
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.chained.crt;
ssl_certificate_key www.example.com.key;
...
}
如果服务器证书和软件包已按照错误顺序连接,Nginx 将无法启动并显示错误消息:
SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
(SSL: error:0B080074:x509 certificate routines:
X509_check_private_key:key values mismatch)
因为 Nginx 已经尝试将私钥与该包的第一个证书一起使用,而不是服务器证书。
浏览器通常存储他们收到的中间证书并由受信任的机构签名,因此主动使用的浏览器可能已经具有所需的中间证书,并且可能不会抱怨没有链接包发送的证书。 为确保服务器发送完整的证书链,可以使用 openssl 命令行实用程序,例如:
$ openssl s_client -connect www.godaddy.com:443
...
Certificate chain
0 s:/C=US/ST=Arizona/L=Scottsdale/1.3.6.1.4.1.311.60.2.1.3=US
/1.3.6.1.4.1.311.60.2.1.2=AZ/O=GoDaddy.com, Inc
/OU=MIS Department/CN=www.GoDaddy.com
/serialNumber=0796928-7/2.5.4.15=V1.0, Clause 5.(b)
i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.
/OU=http://certificates.godaddy.com/repository
/CN=Go Daddy Secure Certification Authority
/serialNumber=07969287
1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.
/OU=http://certificates.godaddy.com/repository
/CN=Go Daddy Secure Certification Authority
/serialNumber=07969287
i:/C=US/O=The Go Daddy Group, Inc.
/OU=Go Daddy Class 2 Certification Authority
2 s:/C=US/O=The Go Daddy Group, Inc.
/OU=Go Daddy Class 2 Certification Authority
i:/L=ValiCert Validation Network/O=ValiCert, Inc.
/OU=ValiCert Class 2 Policy Validation Authority
/CN=http://www.valicert.com//emailAddress=info@valicert.com
...
三、参考资料
- What is the SSL Certificate Chain?
- Nginx - Configuring HTTPS servers - SSL certificate chains
- HTTPS访问异常问题
(完)
网友评论