赞
踩
目录
配置文件对一个系统来说是重中之重,我们常用的数据库连接基本上都是在配置文件里的,还有其他的公私钥,秘钥等等,所以保护好配置文件的信息安全相当重要,特别是那些对数据安全性很高的企业,一旦配置文件信息泄露,那将会带来不可估量的后果。如何解决这类问题呢,所以我们使用jasypt对其重要信息进行加密,这样的话就算有心人得到配置文件的信息,也无法解密。
- <!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
- <dependency>
- <groupId>com.github.ulisesbocchio</groupId>
- <artifactId>jasypt-spring-boot-starter</artifactId>
- <version>3.0.3</version>
- </dependency>
- @SpringBootTest
- public class TestEncryptorTest {
- @Test
- public void test() {
- StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
- encryptor.setPassword("123456");//yml文件里设置的key
- String urlEn = encryptor.encrypt("jdbc:mysql://localhost:3306/mscloud?useUnicode=true&characterEncoding=utf-8&useSSL=false");
- String nameEn = encryptor.encrypt("root");
- String passwordEn = encryptor.encrypt("root");
-
- String urlDe = encryptor.decrypt(urlEn);
- String nameDe = encryptor.decrypt(nameEn);
- String passwordDe = encryptor.decrypt(passwordEn);
- System.out.println("url密文:"+urlEn);
- System.out.println("url明文:"+urlDe);
- System.out.println("username密文:"+nameEn);
- System.out.println("username明文:"+nameDe);
- System.out.println("password密文:"+passwordEn);
- System.out.println("password明文:"+passwordDe);
- }
- }
打印的内容如下,复制加密后的密文,后边会用到,每次生成的密文都是不一样的,不过不影响使用。
- url密文:6GuPV/TtAOmPlFsdRAYTCy4ixiaqetdHv77UrqYcODnCY5IdchAbrlzc/DAGpdL4/BOkRxEvM925nO1MNQMV751Jlcjm/NOnIP2WUs/2CIneUM/kDa1cD3tbcoFe2vNWaecT/E+nztuXFeKe9r6v2R7d8j41iBIR
- url明文:jdbc:mysql://localhost:3306/mscloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
- username密文:UiMbl3d8dLKZUIMp8HMOZ7r6lfsQb0vljQvhEPTqRa8=
- username明文:root
- password密文:NTY6g1rSpvYXVtpt1+SOJIWy9XuIsV/7vPP8TTswJe8=
- password明文:root
新建application.yml文件,将生成的加密串使用ENC标识进行使用,如ENC(加密串)。password: ${ENCRYPT:123456} 这样写的话,假设你再环境变量配置了ENCRYPT或者在当前yml配置了这个变量,就会取这个环境变量的值,如果没找到这个变量值,就会用冒号后边的默认值。
- #jasypt:
- # encryptor:
- # password: ${ENCRYPT:123456} #jasypt加密的盐值,
-
- spring:
- application:
- name: cloud-payment-service
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource
- url: ENC(6GuPV/TtAOmPlFsdRAYTCy4ixiaqetdHv77UrqYcODnCY5IdchAbrlzc/DAGpdL4/BOkRxEvM925nO1MNQMV751Jlcjm/NOnIP2WUs/2CIneUM/kDa1cD3tbcoFe2vNWaecT/E+nztuXFeKe9r6v2R7d8j41iBIR)
- username: ENC(UiMbl3d8dLKZUIMp8HMOZ7r6lfsQb0vljQvhEPTqRa8=)
- password: ENC(NTY6g1rSpvYXVtpt1+SOJIWy9XuIsV/7vPP8TTswJe8=)
我们在生成加密串的时候设置了盐值为123456,如下图所示。
配置文件如果不知道盐值,它自己也解不了密啊,所以我们可以再配置文件配置,这样的话虽然解决问题了,但是我都知道你盐值了,我难道还解不出你的密文吗?所以这样做不安全,但如果是随便玩玩,偷偷懒的话,也可以这样放着,看着感觉安全O(∩_∩)O。。
- jasypt:
- encryptor:
- password: ${ENCRYPT:123456} #jasypt加密的盐值,
因此我们还有其他方案来解决这个问题。
点击右侧的加号,添加jasypt.encryptor.password,这样本地能正常启动,但是打包呢,往服务器上部署呢?
指定某个项目设置打包参数或者全局设置
部署启动,启动jar包是传入
java -jar -Djasypt.encryptor.password=123456 test.jar
可以通过系统环境变量设置盐值,在项目启动的时候先获取环境变量,然后传入对应的位置即可。假设我在系统环境变量配置了ENCRYPT=123456,只需在配置文件使用${ENCRYPT}即可获取到。不过再启动的时候一定要确保设置了该系统变量,不然肯定起不来哦。
- jasypt:
- encryptor:
- password: ${ENCRYPT}
- # password: ${ENCRYPT:123456} #如果环境变量里没找到,则取冒号后边的默认值
打开/etc/profile
文件
vim /etc/profile
在profile文件末尾插入salt(盐)变量
export ENCRYPT=123456
编译,使配置文件生效
source /etc/profile
运行
java -jar -Djasypt.encryptor.password=${ENCRYPT} test.jar
还有一种就是放到服务器上的某个位置,启动的时候加载该文件获取信息。
SpringBoot3 配置如下
- package vip.aster.admin.config;
-
- import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
- import lombok.extern.slf4j.Slf4j;
- import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
- import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
-
- /**
- * @author jin
- * @date 2024/2/5
- * @Note
- */
- @Configuration
- @EnableEncryptableProperties
- @Slf4j
- public class JasyptConfig {
-
- @Value("${jasypt.encryptor.password}")
- private String encryptorPass;
-
- /**
- * 配置StandardPBEStringEncryptor加解密器的配置
- * @return
- */
- @Bean
- public EnvironmentStringPBEConfig environmentStringPBEConfig() {
-
- log.info("encryptorPass:"+encryptorPass);
- EnvironmentStringPBEConfig environmentStringPBEConfig = new EnvironmentStringPBEConfig();
- //设置算法
- environmentStringPBEConfig.setAlgorithm("PBEWithMD5AndDES");
- environmentStringPBEConfig.setPassword(encryptorPass);
- return environmentStringPBEConfig;
- }
-
- /**
- * 配置StandardPBEStringEncryptor加解密器
- * @return
- */
- @Bean("jasyptStringEncryptor")
- public StandardPBEStringEncryptor standardPBEStringEncryptor() {
- StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
- standardPBEStringEncryptor.setConfig(environmentStringPBEConfig());
- return standardPBEStringEncryptor;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。