[SSL 证书转换 (一)] 关于 JKS 转换成 CRT 和 KEY
之前遇到个问题,客户做小程序系统,而小程序前后端交互需要 https 协议,因此就需要在后端 nginx 前置服务器配置 SSL 证书。而客户给的 SSL 证书,是 Java 版的 jks 证书;且客户提供的配置好基本环境的 nginx,所需要的证书是 crt 和 key 组合形式,因此需要进行证书转换。在证书转换和证书配置过程中,以及后续的实际生产部署的过程中,也遇到了各种坑。[强烈建议,有钱的用户,或者省事的用户,使用云服务器,不要自建服务器,这样可以有免费的 ssl 证书,可以很简单的配置]
现在简单记录下配置的步骤:
- 拿到 jks 证书,和证书密码(确认没有密码的,拿刀找你们运维去,或找供应方去)
- 先将 jks 转换成 p12 格式,具体命令如下:
keytool -importkeystore -srckeystore C:\cert\server.jks -destkeystore C:\cert\server.p12 -srcstoretype jks -deststoretype pkcs12
输入命令后,会提示你三步骤,需要输入口令(建议输入相同的口令,就是你的 jks 口令,防止后续证书转换忘记密码)
1). 输入目标密钥库口令:
2). 再次输入新口令:
3). 输入源密钥库口令:
接下来就会提示你如下:
已成功导入别名 ca_root 的条目
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消
到了这一步,说明已经 OK 了,剩下的就是转换成 crt 证书和 key 了3. 将 p12 转换成 crt 证书, 命令如下:
openssl pkcs12 -in C:\cert\server.p12 -nokeys -clcerts -out C:\cert\server.crt
4. 将 p12 生成非加密的 key, 命令如下:
openssl pkcs12 -in C:\cert\server.p12 -nocerts -nodes -out C:\cert\server.key
5. 将证书配置到 nginx 以后,重启 nginx 服务器
6. 使用 ssl 漏洞扫描工具,检验证书链的完整性,并获取证书链(<font color=red> 防止小程序报: fail ssl hand shake error</font>),推荐地址 https://myssl.com/chain_download.html
7. 拷贝证书链以后,将服务器上 server.crt 内容替换,重启 nginx(或 nginx -s reload)
8. 如果还不行,(比如:网页访问,依然不安全) 请清空缓存,刷新ps : 至于以上的命令,比如: keytool、openssl 哪里来?你问我?问我为什么不安装下呢?百度啊!