现在网络安全越来越重要,但是开发过程中还会出现明文密码的问题。
我们使用Tomcat配置https,以为很安全了,但是证书密码配置的是明文,如果是RSA的加密套件,
则使用wireshark是可以直接解密的,前提是如果能拿到证书的密码。
所以需要对证书的密码进行加密存储。
配置方式为自定义一个类,继承Tomcat的Http11Protocol类,在init方法执行前,把证书的密码设置进去。
另外需要单独写一个jar包,并且放到Tomcat\lib这个目录下,这样会优先加载。
关于Tomcat的加载顺序,可以看下其它文章。
1、自定义一个类
package com.mine;
import org.apache.coyote.http1.Http11NioProtocol;
public class MyHttp11NioProtocol extends Http11NioProtocol{
@override
public void init() throw Exception{
super.setKeystorePass("加密后 的密码");//这里可以直接把密文写在这里或者从Tomcat的配置文件中读取。
super.init();
}
}
打包成一个myprotocol.jar文件
2、把myprotocol.jar文件放到Tomcat\lib目录下
放到这里保证用之前先加载。
3、修改Tomcat\conf\server.xml文件的配置
这里可以直接省去证书密码配置,密码写在代码里,或者放到下面的配置文件里,密码是密文,在
代码里读取这里面配置的,并进行解密。
<Connector port="8443" protocol="com.mine.MyHttp11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="./conf/keystore"
clientAuth="false" sslProtocol="TLS" />
参考了以下文章,感谢提供的思路。
https://blog.csdn.net/baidu_18607183/article/details/83068827