如何补全 SSL 证书链?(含申请免费泛域名 SSL 证书方法)

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

当下人们对安全性的要求越来越高,对于网站而言加个绿锁(SSL 证书)就显的很重要,特别是有交易往来的网站尤为迫切,但是有时候就会发现,添加了绿锁反而出现了错误,导致网站打不开,在 Android 客户端最为明显:

ssl-miui.png

ssl-qq.png

ssl-uc.png

那么,明明是权威机构正常签发的证书,在电脑上开也是正常的,为什么会出现错误呢?其实在第二张截图(通过 QQ 浏览器访问)已经提示得很清楚了,证书链不完整!

一、证书的组成

我们知道完整的证书内容一般分为 3 级,服务端证书 - 中间证书 - 根证书,即 SSL Certificate, Intermediate CA 和 Root CA,这 3 级构成了一个完整的证书链。

证书构成.png

证书构成2.png

  • SSL Certificates(blog.vircloud.net):用来加密传输数据的公钥的证书,一般就是我们申请到的用于 https 加密的证书。
  • Intermediate CA(COMODO RSA Domain Validation Secure Server CA):用来认证公钥持有者身份的证书,即确认用户 https 使用的上述证书是由 Intermediates 签发的。
  • Root CA(COMODO SECURE):用来认证 Intermediate CA 是合法证书的证书,通常都已内置在操作系统或浏览器中。

简单来说,SSL Certificates 证书上面几级证书都是为了保证 SSL Certificates 证书未被篡改,保证是 CA 签发的合法证书,进而保证 SSL Certificates 证书中的公钥未被篡改。

二、证书的认证

上面说到,操作系统或浏览器中已经预置了一些受信任的根证书颁发机构和某些中间证书颁发机构,SSL 证书在被验证时最终要验证其根证书是否可信,即是否已被内置,如果网站证书的根证书在浏览器可信任根证书列表里或者中间证书颁发机构在可信其证书列表里,那么网站就是可信的。

以本站为例,简单来说,就是认证证书时会从 blog.vircloud.net 开始,一层层验证 COMODO RSA Domain Validation Secure Server CA、COMODO SECURE,最终 COMODO SECURE 在系统或浏览器中是被信任的,那么就会在地址前显示小绿锁。

由于大多终端证书都不是由根证书签发的,而是由三级或多级结构构成的,浏览器无法通过用户证书直接验证其根证书,浏览器就会报告网站的证书来自未知授权中心,这时中间证书即证书链文件起了作用,证书链文件告诉了浏览器用户证书的上级证书机构即中间证书,浏览器再通过中间证书验证其上级根证书是否为可信。

总结一下,证书的签发和认证可以用下图来概括:

sign.verifiy.jpg

在用户证书里面我们会找到这样的信息,Authority Info Access(权威信息访问),通过这里面的 URL ,我们可以获得这个证书的颁发者证书,即中间证书,就是说我们在部署 SSL 证书时没有把证书链文件(中间证书)部署进去,浏览器依然可以通过证书上面的 url 信息访问到中间证书,继而验证根证书。

证书构成3.png

然而,部分浏览器特别是 Android 手机浏览器,似乎并不支持这种方式获得中间证书,这就造成了即使我们的证书是权威机构签发的并且电脑访问没有问题,到了手机浏览器就提示证书不受信任或未知授权中心,这个时候我们要做的就是补全证书链。

三、补全证书链

需要补全证书链,很大原因也是签发机构签发证书时,是单独提供了用户证书,导致用户也只部署了用户证书,若未做兼容性测试,只在电脑上验证,是很难发现证书部署有问题的。

在第二部分我们讲到了证书的组成,由于常见的根证书已经内置了,所以不需要额外操作,我们要做的就是将中间证书添加到用户证书中,同样的根据完整证书结构:

-----BEGIN CERTIFICATE-----
用户证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
中间证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
根证书
-----END CERTIFICATE-----

我们在证书机构下载到中间证书后,将其补到用户证书尾巴即可。
当然了,由于中间证书是公开的,所以我们也可以利用现成的工具去补全:

四、附:申请免费泛域名 SSL 证书

1、申请地址

2、申请方法

申请前请确保已开通域名邮箱,否则无法申请。

① 生成证书请求文件 csr

直接利用现成的工具生成或者利用 openssl 命令行生成:

工具:雷铭 SSL 在线生成 CSR
命令行

# openssl req -out youdomain.csr -new -sha256 -newkey rsa:2048 -nodes -keyout youdomain.key

② 填写信息

根据页面提示填写相关信息,除了邮箱一定要是真实的可接收邮件的,其他的尽量真吧,以 しらSSL 为例:

apply.ssl.png

③ 签发证书

信息填好就可以直接点申请了,中间会提示验证域名,选择合适的邮箱验证即可,然后到邮箱根据收到的邮件核准签发,之后等待十几二十分钟即可收到证书邮件。


参考文章:
1、《SSL证书的证书链文件使用的重要性
2、《证书链是什么?


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 SSL证书链补全 的文章

 本文最后更新于 2018/03/19 17:41:23,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 运维 > 如何补全 SSL 证书链?(含申请免费泛域名 SSL 证书方法)

精选评论

  1. 低调哥
    低调哥 回复

    Android 8.1.0Safari 537.36来自 浙江 的大神

    浪费了7元钱短信费也没搞定。。。
    请求大佬帮忙
    微信以求助