SpringBoot + StandardPBEStringEncryptor 同时支持http和https双协议
前言
在我们实际工作中,直接启动一个服务,如果服务需要同时支持http和https协议,常见的做法就是将生成的证书文件和密码配置到yml文件中;但是在一些安全要求比较严格的项目中,这种做法会导致程序存在安全漏洞,无法上线,因此,我们必须采取一些方法解决这个问题,在常见的方法就是使用StandardPBEStringEncryptor对证书密码进行加密,在服务启动时再对密码进行解密,以下为一个简单的示例。
设置电脑的系统变量
系统变量如下
以下仅为示例
变量 | 值 |
---|---|
APPLICATION_ENCRYPTION_ALGORITHM | PBEWITHHMACSHA512ANDAES_256 |
APPLICATION_ENCRYPTION_IVGENERATOR | org.jasypt.iv.RandomIvGenerator |
APPLICATION_ENCRYPTION_KEY | vmtcnbBi2Y4n1A== |
APPLICATION_ENCRYPTION_SALTGENERATOR | org.jasypt.salt.RandomSaltGenerator |
APPLICATION_KEYSTORE_FILE | D:******\tomcat.keystore |
APPLICATION_KEYSTORE_KEY | ihzYub0ggcwvhK4adCtj8kxtK9TmlhqHPmeqQ3tKYvE+2lfy5V5q2assGgkAhGX6nTrvlbkJtjk2eDfJFL9etA== |
密码加密
ihzYub0ggcwvhK4adCtj8kxtK9TmlhqHPmeqQ3tKYvE+2lfy5V5q2assGgkAhGX6nTrvlbkJtjk2eDfJFL9etA==
为加密的密码
public static void main(String[] args) {
String encrypt = encrypt("明文证书密码");//次方法为示例加密方法
}
实现四路
生成证书
生成证书的方法网上查一下即可,此处不做叙述。
证书密码加密
以下为使用StandardPBEStringEncryptor对证书加密的示例,入参为待加密的明文证书密码,加密所需参数皆为系统变量中获取的,降低泄露的风险。
public static String encrypt(String plainText) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
config.setAlgorithmEnvName("APPLICATION_ENCRYPTION_ALGORITHM");
config.setIvGeneratorClassNameEnvName("APPLICATION_ENCRYPTION_IVGENERATOR");
config