用keytool制作证书并在tomcat配置https服务(一)
用keytool制作证书并在tomcat配置https服务(二)
用keytool制作证书并在tomcat配置https服务(四)
模拟CA实现对服务器证书的认证
我们在前篇的双向认证上继续。
CA认证,是这个机构的根证书已经存在于浏览器中的【受信任的根证书颁发机构】,浏览器信任他,所以不会出现该证书不安全的提示。
那么我们可以模拟一个CA,自己对服务器端证书进行签名,然后把模拟CA的根证书导出来,发送给客户端,让客户端添加到信任机构。
1.首先服务端需要生成一个带证书及主体信息的签名申请文件csr格式,CA需要用来制作签名证书。
keytool -certreq -keyalg RSA -alias tomcat -sigalg SHA256withRSA -keystore D:/ssl/keystore.jks -file D:/ssl/serverreq.csr
2.CA也是有自己的密钥对和密钥库的,创建好。
keytool -genkey -alias rootca -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype JKS -keystore D:/ssl/castore.jks -storepass 123456
查看一下
keytool -list -v -keystore D:/ssl/castore.jks
3.CA库有了,然后CA用自己的私钥对服务端申请签名文件中的证书进行签名操作。
keytool -gencert -alias rootca -keystore D:/ssl/castore.jks -infile D:/ssl/serverreq.csr -outfile D:/ssl/signedserver.cer
然后我们看一下,发布者是CA
keytool -printcert -file D:/ssl/signedserver.cer
4.我们将CA库的证书导出来,这就是上边这个signedserver.cer的根证书。
keytool -export -alias rootca -keystore D:/ssl/castore.jks -storetype JKS -keypass 123456 -file D:/ssl/rootca.cer
这个证书的作用有两个:
(1)需要给客户端,客户端需要这个根证书对服务端证书进行验证。
(2)我们需要把新生成的签名证书再导入到服务端的库里覆盖原来的未签名证书。
因为是根证书做的签名,不把根证书导入就会报【无法从回复中建立链】这么个错误。
所以先导入根证书,再导入服务端签名证书。
5.服务端导入根证书
keytool -import -v -alias rootca -file D:/ssl/rootca.cer -keystore D:/ssl/keystore.jks
6.服务端导入签名证书覆盖原证书
keytool -import -v -alias tomcat -file D:/ssl/signedserver.cer -keystore D:/ssl/keystore.jks
来看一下服务端的库
keytool -list -v -keystore D:/ssl/keystore.jks
这里边一共有三条信息:
(1)rootca证书信息
(2)刚刚导入的覆盖的别名叫tomcat的签名证书
(3)上一篇做的双向认证导入的客户端证书。
7.把根证书rootca.cer发送给客户端,安装到浏览器中的【受信任的根证书颁发机构】。
到这就结束了,然后我们启动tomcat看下效果【tomcat的server配置还是上一篇的配置,没有变】。
然后我们点击上边的这个小锁查看下证书信息。
结束。