证书链校验 与 证书合并

2018/09/14 OpenSSL 证书

背景

我们在配置HTTPS双向认证时,我们的客户端证书是由WebTrust认证的CA机构进行签发的 (买的),而且CA机构并不是根证书进行直接签发而是通过中间证书进行签发。Nginx进行配置CA证书的时候,浏览器进行验证 一直报一个证书错误 SSL certificate error 。所以引出了此文,证书的验证与合并 进行证书的判断。

证书准备

以本网站 blog.viakiba.cn 为例子,证书概述如下:

证书概览

证书链如下

证书概览

获取证书链中的证书

证书概览

导出证书链证书

在上图中证书链一栏中,点击上层证书也可以看到证书的信息,导出证书是在详细信息一栏中下方的 复制到文件。

证书概览

点击复制到文件后,可以参考此链接的后续导出 (注意 Base64 编码):https://help.aliyun.com/knowledge_detail/40743.html

证书校验

此处借助 OpenSSL 进行校验: 首先导出的三个证书都只包含本身的证书信息,不包含证书的上级证书。

证书的合并

我们一般会有三种证书: RootCA.crt(rCA,被信任的根证书)、IntermediateCA.crt(mCA,某些厂商有多个中间证书)、server.crt(sCA,通过CSR签下来的证书),某些厂商的rCA和mCA是需要用户自己下载的。为了让浏览器能够信任我们的证书,我们需要配置一条完整的证书链,证书链由sCA和mCA构成就好,rCA是浏览器内置,不需要服务器给提供。nginx配置证书链的时候,就是指定一个证书文件,这个文件中含有我们整个证书链的所有证书就好,证书合并的时候,正确的合并方法是把 mCA 合并到 sCA 中。当有多个 mCA 文件时,mCA 从下级到上级(根证书为最上级)依次合并到 sCA 中。在这个过程中,rCA 被视为多余的文件。


-----BEGIN CERTIFICATE-----
...... sCA ......
------END CERTIFICATE------

-----BEGIN CERTIFICATE-----
...... mCA (lower) ......
------END CERTIFICATE------

-----BEGIN CERTIFICATE-----
...... mCA (upper) ......
------END CERTIFICATE------

证书校验

我们可以遇到如下类的错误:

error 2 at 1 depth lookup:unable to get issuer certificate
error 2 at 2 depth lookup:unable to get issuer certificate

当CA文件缺少正确的根证书和中间证书时,会发生此错误。 要解决此问题,请确保CA文件中包含根证书和中间证书。

例如:

----BEGIN CERTIFICATE-----
[SECONDARY INTERMEDIATE CERTIFICATE]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[PRIMARY INTERMEDIATE CERTIFICATE]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[ROOT CERTIFICATE]
-----END CERTIFICATE-----

校验指令

openssl verify -CAfile

Search

    Table of Contents