修复内网服务器IIS提示证书链丢失的问题

昨天在自己的私有服务器上部署了IIS的服务,然后在添加https的时候遇到了,证书链中的一个或多个中间证书丢失的问题,当然在一台可以连接互联网的电脑下,也就是windows update更新下证书链的事情,但是我服务器由于某些原因是不通网络的,这次我就尝试解决下这个问题。

(English version translate by GPT-3.5)

重现

在IIS上次证书后,分配证书的【有好名字】后,提示如图所示。
重现问题

查看证书状况

  1. 我们先前往IIS管理器 - 左侧选择一台服务器 - 右侧找到 服务器证书
    找到 服务器证书

  2. 然后,找到刚刚导入的证书,双击或者右键查看

    找到查看的证书

  3. 可以看到它显示这个证书缺少颁发者,即缺少了根证书。

    一个完整的证书链,它包含根证书(一般根证书有效时间很长),然后包含由根证书所颁发的中间证书(有效时间通常比根证书短,但是也很长),最后https的证书是由中间证书颁发的证书,一个完整的证书肯定会包含这些。

    证书提示缺少颁发者

    如下图,百度的证书,可以看到它是由根证书GlobalSign Root CA - R1签发给GlobalSign Organization Validation CA - SHA256 - G2,最后签发 baidu.com的证书,当电脑从自己的证书库中找1,2的证书,并且这些证书存在时,才会认为baidu.com这个证书是一个有效的证书,才会信任它。
    百度的证书

  4. 所以现在的问题就是重新导入我这个证书链中的根证书,中间证书,让系统重新信任它。

查看证书链

一个完整的证书链包含根证书,中间证书和网站的证书,可以将证书部署到可以公网访问的nginx中,然后访问网站,在浏览器中可以看到完整的证书链,就像这样子

完整的证书链

也可以通过一个网站 MySSL.com - SSL安全评估报告 来看到自己的证书链(同时还能评估网站SSL评级,是一个很不错的网站)

MySSL查看证书链

下载证书

打开mmc 控制台根节点

打开

1
开始 - 运行 - 输入 mmc打开控制台根节点

然后选择

1
左上角文件 -  添加管理单元

弹出的窗口中选择

1
证书,并选择中间的→箭头

弹出的窗口中选择

1
计算机根证书 - 本地计算机

可以看到如下的画面

控制台根节点 MMC

看到证书的确不存在

查看受信任的根证书颁发机构 - 证书是否缺少上面证书链的根证书,以及中间证书颁发机构 - 证书是否的确缺少上面的中间证书,如下图,可以看到中间证书颁发机构的确缺少了 Encryption Everywhere DV TLS CA - G1 的证书

中间证书颁发机构的确缺少证书

去官网下载证书

一般一个受信任的的根证书和中间证书是可以从官网下载的,从上面的证书链看到,我需要下载如下的根证书和中间证书

1
2
根证书:DigiCert Global Root CA
中间证书:Encryption Everywhere DV TLS CA - G1

一般官网都会提供对应根证书的下载链接,我经过一番搜索后,得到上述根证书可以从 DigiCert Trusted Root Authority Certificates 下载

通过证书名字匹配,并找到2个根证书,下载到本机,假设根证书名字是 root.pem,中间证书是middle.pem

DigiCert Global Root CA
Encryption Everywhere DV TLS CA - G1

或者。。。直接在MySSL中下载证书链完事。。。

MySSL.com 下载证书链
下载的证书链中如下格式

1
2
3
4
5
6
7
8
9
10
11
-----BEGIN CERTIFICATE-----
MIIGCDCCBPCgAwIBAgIQAe48iOSHl0K9KHZthVDL9zANBgkqhkiG9w0BAQsFADBu
......
BmoAiYiLOxDzfpW5Gm1+ij6A0pUmCdfGouUoZ2FkVMFJW5fvIXhlwAx14CbKx+y5
raMYUEBz+9xDxbgh
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
....
rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg==
-----END CERTIFICATE-----

其中上面一部分的 -----BEGIN CERTIFICATE-----为中间证书,下面的是根证书,将其2部分分开,分别保存到middle.pem和root.pem中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
下面的内容单独保存到 middle.pem
-----BEGIN CERTIFICATE-----
MIIGCDCCBPCgAwIBAgIQAe48iOSHl0K9KHZthVDL9zANBgkqhkiG9w0BAQsFADBu
......
BmoAiYiLOxDzfpW5Gm1+ij6A0pUmCdfGouUoZ2FkVMFJW5fvIXhlwAx14CbKx+y5
raMYUEBz+9xDxbgh
-----END CERTIFICATE-----


下面的内容单独保存到 root.pem
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
....
rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg==
-----END CERTIFICATE-----

导入证书

证书都完备了,现在就导入证书了

在控制台根节点 MMC中,进入

1
受信任的根证书颁发机构 - 证书

右键选择

1
所有任务 - 导入

根证书导入

选择 DigiCertGlobalRootCA(即上面的root.pem文件),然后下一步,证书存储到受信任的根证书颁发机构(默认下一步即可)

根证书导入完成

然后同样方法,进入左侧的

1
中间证书颁发机构中,进行右键 - 所有任务 - 导入

按上面的导入方法,导入middle.pem,完工

导入中间证书完成

回到IIS,查看证书链

最后回到最开始的IIS 服务器证书,查看证书路径,可以看到证书恢复正常了,至此,完工!

证书链