如何使用Windows IIS颁发的证书生成Netty SocketIO支持SSL所需要的JKS密钥库?

大体背景是,同一机器上Windows IIS的Web服务和基于Netty SocketIO的WebSocket服务都需要支持SSL功能。

一开始两个服务是不同团队开发,于是分别各自生成支持SSL所需要的证书和密钥库。IIS这边只需要颁发证书,而Netty SocketIO这边因为是Java开发,需要通过keytool生成密钥库文件和证书。

后来在一起集成部署后,测试发现需要导入两次证书,对用户很不方便。

于是想到既然在一个机器上部署,能不能两个服务共用一个证书。

由于IIS哥们有事请假半天,WebSocket团队这边最初的想法就是直接双击IIS生成的CER证书看看能不能导出keytool兼容的格式,结果发现只能导出DER/Base64编码的X509(.CER)证书,或者PKCS#7(.P7B)证书。因为导出界面禁止了导出PKCS#12(.PFX)证书,折腾半天找不到办法。后来IIS哥们回来告诉了正确的姿势:1)打开IIS管理器;2)左侧点机器名节点(比如,<Hostname> (<Hostname>\Administrator)),双击右边的“服务器证书”进入证书列表界面,选一个证书,点击鼠标右键选“导出”即可以导出PFX格式文件(比如myhostname.pfx)并设置保护密码。

有了PFX文件,那么接下来简单了,用keytool将其转成JKS格式密钥库(比如keystore.jks):

keytool -importkeystore -srckeystore myhostname.pfx -destkeystore keystore.jks -srcstoretype PKCS12 -deststoretype JKS

最后,拷贝keystore.jks给WebSocket指定的密钥库目录即可。

事后测试证明,用户只要安装一个证书,就同时搞定Web服务和WebSocket服务的SSL功能。

发布了22 篇原创文章 · 获赞 8 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/csdn_zf/article/details/100142393