修复内网服务器IIS提示证书链丢失的问题
昨天在自己的私有服务器上部署了IIS的服务,然后在添加https的时候遇到了,证书链中的一个或多个中间证书丢失的问题,当然在一台可以连接互联网的电脑下,也就是windows update更新下证书链的事情,但是我服务器由于某些原因是不通网络的,这次我就尝试解决下这个问题。
(English version translate by GPT-3.5)
重现
在IIS上次证书后,分配证书的【有好名字】后,提示如图所示。
查看证书状况
我们先前往IIS管理器 - 左侧选择一台服务器 - 右侧找到 服务器证书
然后,找到刚刚导入的证书,双击或者右键查看
可以看到它显示这个证书缺少颁发者,即缺少了根证书。
一个完整的证书链,它包含根证书(一般根证书有效时间很长),然后包含由根证书所颁发的中间证书(有效时间通常比根证书短,但是也很长),最后https的证书是由中间证书颁发的证书,一个完整的证书肯定会包含这些。
如下图,百度的证书,可以看到它是由根证书
GlobalSign Root CA - R1
签发给GlobalSign Organization Validation CA - SHA256 - G2
,最后签发baidu.com
的证书,当电脑从自己的证书库中找1,2的证书,并且这些证书存在时,才会认为baidu.com
这个证书是一个有效的证书,才会信任它。
所以现在的问题就是重新导入我这个证书链中的根证书,中间证书,让系统重新信任它。
查看证书链
一个完整的证书链包含根证书,中间证书和网站的证书,可以将证书部署到可以公网访问的nginx中,然后访问网站,在浏览器中可以看到完整的证书链,就像这样子
也可以通过一个网站 MySSL.com - SSL安全评估报告 来看到自己的证书链(同时还能评估网站SSL评级,是一个很不错的网站)
下载证书
打开mmc 控制台根节点
打开
1 | 开始 - 运行 - 输入 mmc打开控制台根节点 |
然后选择
1 | 左上角文件 - 添加管理单元 |
弹出的窗口中选择
1 | 证书,并选择中间的→箭头 |
弹出的窗口中选择
1 | 计算机根证书 - 本地计算机 |
可以看到如下的画面
看到证书的确不存在
查看受信任的根证书颁发机构 - 证书
是否缺少上面证书链的根证书,以及中间证书颁发机构 - 证书
是否的确缺少上面的中间证书,如下图,可以看到中间证书颁发机构的确缺少了 Encryption Everywhere DV TLS CA - G1
的证书
去官网下载证书
一般一个受信任的的根证书和中间证书是可以从官网下载的,从上面的证书链看到,我需要下载如下的根证书和中间证书
1 | 根证书:DigiCert Global Root CA |
一般官网都会提供对应根证书的下载链接,我经过一番搜索后,得到上述根证书可以从 DigiCert Trusted Root Authority Certificates 下载
通过证书名字匹配,并找到2个根证书,下载到本机,假设根证书名字是 root.pem,中间证书是middle.pem
或者。。。直接在MySSL中下载证书链完事。。。
下载的证书链中如下格式
1 | -----BEGIN CERTIFICATE----- |
其中上面一部分的 -----BEGIN CERTIFICATE-----
为中间证书,下面的是根证书,将其2部分分开,分别保存到middle.pem和root.pem中
1 | 下面的内容单独保存到 middle.pem |
导入证书
证书都完备了,现在就导入证书了
在控制台根节点 MMC中,进入
1 | 受信任的根证书颁发机构 - 证书 |
右键选择
1 | 所有任务 - 导入 |
选择 DigiCertGlobalRootCA(即上面的root.pem文件),然后下一步,证书存储到受信任的根证书颁发机构(默认下一步即可)
然后同样方法,进入左侧的
1 | 中间证书颁发机构中,进行右键 - 所有任务 - 导入 |
按上面的导入方法,导入middle.pem,完工
回到IIS,查看证书链
最后回到最开始的IIS 服务器证书,查看证书路径,可以看到证书恢复正常了,至此,完工!