什么鬼,居然就设置一个IIS的事情,你居然还要写一篇博客?!
简单回答:是的!
第一阶段
当然,对于此类Goddy上申请的证书,Goddy会给你生成后的证书文件,里面包含一个 p7b 以及一个 crt 文件。然鹅IIS要使用的是PFX文件。怎么办呢?
在Goddy官方有这样一篇教程,会教你如何在IIS里使用“完成证书申请”来安装证书,也会有很多文章告诉你都是这样操作的。然鹅我这样操作的时候遇到了一点小问题,就是完成证书申请后证书列表里有这样一张证书,但是刷新一下就消失了……无论以何种方式完成申请,不是报错就是刷新后消失。
我琢磨这个问题琢磨了很久,最后只能推测为——完成申请证书的这台机器不是原来制作证书申请的机器,所以没有对应的私钥,也就进而导致无法完成申请证书。
因为我这是帮同事的忙部署的,所以后来联系了相关的同学,于是给我补充了两个文件。
看到key文件没?妥妥的私钥啊。辣么问题来了,我应该怎么通过这些文件来获得pfx文件呢?看起来通过完成证书申请不知道咋弄啊。
然后我想到了万能的Linux。毕竟Windows上不好做到的,Linux似乎都很容易……来来来,openssl一招搞定(参考资料)。
openssl pkcs12 -export <目标pfx> -inkey <申请的key> -in <Goddy返回的crt> -certfile <其它crt文件>
最后一个 -certfile
是可选的。参考资料里是Goddy的bubble,但是提供给我的文件里是个p7b文件没法用,所以我就留空了。命令行里,cert.pfx 是最终生成的pfx,后面的key和crt分别对应了前面的文件。下面的密码是指定导出密码,我这里全都省略了直接按回车。
回车后,PFX文档搞定。啊,Bash(WSL)真是一个好东西啊。OpenSSL也是一个好东西,嗯。
然后拿到pfx了,直接在IIS的服务器证书里导入,再去绑定域名,就可以了对不?理论上如此啊,只可惜我这么操作的时候,在最终绑定域名添加证书的时候,报了一个我摸不着头脑的错误……
我在尝试谷歌这些错误的时候,无一例外地提到了这样一篇长长的checklist,这篇checklist告诉了你,这个问题很复杂,解决起来很麻烦,很有技术含量。
然而我检查了所有提示之后,都没找到问题所在。直到最后在这篇台湾同胞的文章中才找到了答案。
原来,安装证书,不仅要IIS里导入,导入的时候勾中允许导出此证书,还需要在证书管理器中手动导入,导入的时候还得选中“标志此密钥为可导出的密钥”。
我记得之前安装别个证书没这么复杂啊。为啥Goddy的证书这么麻烦。
如此这般后,绑定就正常了。
综上所述,总结而言就是:
- 需要原始申请的key文件,以及Goddy发过来的crt文件,使用OpenSSL合并成pfx文件
- 证书管理器中除了p7b需要安装外,还需要安装pfx文件(需要再本地计算机中,所以直接运行
certmgr.msc
不行,而是运行mmc.exe
后在文件菜单中点击“添加/删除管理单元”,然后依次选择证书、本地计算机) - 在IIS中的服务器证书中导入pfx证书
- 设置绑定
阿西吧。
第二阶段
这时候我开始琢磨了,因为之前安装别的证书似乎不需要这么手动导入。那么这里的问题是啥呢,于是我留意到了这个p7b文件。根据Goddy的指南,这里面包含了Goddy的中间证书。
那么有没有办法把这个证书合并到pfx里呢?合并过去是不是就不需要再去这样手动导入证书管理器呢?
首先,我在这篇SSL的教程中查到了相关的命令行。
openssl pkcs7 -print_certs -in gd-g2_iis_intermediates.p7b -out gd.crt
最后的 gd.crt 就是我们需要用到的其它crt文件。再修改一下最终得到pfx的命令行。
openssl pkcs12 -export <目标pfx> -inkey <申请的key> -in <Goddy返回的crt> -certfile gd.crt
如此得到的PFX文件,可以直接在IIS中导入(导入的时候同样需要选中可导出),就可以绑定了,不再会有错误。
果然谷歌是个好东西啊……
GIF出处群934446546