因为项目中需要加密传输网络,所以考虑让tomcat支持双向认证,客户端需要验证服务器的可信性,服务器端也需要验证客户端的可信性,实现如下:
1.生成服务器端的密钥,用于加密服务器端的信息:
1 | keytool -genkey -keystore tomcat.keystore -dname "CN=Moss, OU=Moss, O=Moss, L=Xi'an, ST=Shanxi, C=CN" -validity 36500 -storetype jks -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keypass tomcat -storepass tomcat -alias tomcat |
2. 生成客户端的个人证书(P12):
浏览器连接服务器用的钥匙,服务器只是信任密钥,用户需要在使用前导入P12证书证明自己的身份。
1 | keytool -genkey -keystore client.p12 -dname "CN=Moss, OU=Moss, O=Moss, L=Xi'an, ST=Shanxi, C=CN" -validity 36500 -storetype PKCS12 -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keypass client -storepass client -alias client |
3. 导出可信个人可信证书cer文件
因为PKCS12格式的文件无法直接导入密钥,需要从个人信息中提取cer格式证书。
1 | keytool -export -file client.cer -keystore client.p12 -storetype PKCS12 -storepass client -rfc -alias client |
4. 导入个人可信证书入服务器密钥
将个人可信证书导入服务器密钥,这样客户端就作为可信源自由连接服务器。
1 | echo y | keytool -import -v -file client.cer -keystore tomcat.keystore -storepass tomcat -alias client |
导入后cer文件就没有用了,因为可信证书已经进了服务器的密钥库了,所以进行删除。
1 | rm -f client.cer |
5. 查看当前服务器端密钥证书情况
这时如果不出问题,应该是有两个证书存在,一个是服务器本身的密钥,用于加密服务器的对外的服务内容;另一个是客户端的可信证书,用于验证客户端身份;
1 | keytool -list -keystore tomcat.keystore -storepass tomcat |
如果按照上面的操作无误, 那么得到的应该如下:
1 | 密钥库类型: JKS |
6. 将服务器端导出为可信机构证书
因为我们的服务器进行了加密,所以我们需要导入服务器端的可信证书来进行服务器的访问。
1 | keytool -rfc -file tomcat.cer -keystore tomcat.keystore -export -alias tomcat -storepass tomcat |
7. 总结
因为急用,所以写得有些伧俗,之后有时间喝咖啡的时候再把这段批处理调整一下,到时可以支持指定需要生成什么样的文件(可信机构证书、服务器密钥、个人证书)。
1 |
|
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com