应用系统实施部署时,生产环境数据库用户密码等敏感信息如果直接明文存储在配置文件中,很容易信息泄露存在很大的风险。
规范化的实施规范,生产环境配置信息应该只有对应的运维实施人员掌握,研发人员以及其他人员都不该掌握此信息,以保障生产环境信息数据安全。当然小公司研发人员从研发到运维啥都做也没什么安全规范的可以忽略。
war包部署加密方式
传统war包部署在中间件中的方式,可以在中间件中配置数据源信息,程序获取中间件数据源的数据库配置信息以达到加密的目的。
SpringBoot加密方式
随着现在SpringBoot的火爆,jar包轻量级的部署方式抛弃了中间件,可以采用Jasypt安全框架进行敏感信息加密。
Jasypt集成SpringBoot步骤
1、添加依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
2、配置文件加密
spring.datasource.username= ENC(U7gvFgPcCMGw/opVnB8I6vcHiFmKZNt8Vu/4PTYn1a05755N02+bEDn)
spring.datasource.password= ENC(wwhIOI+9f+X2hFZsxRT5Z9yvg3CHy03IKzZY1ZU+abBzFY2o)
3、密钥
jasypt.encryptor.password=123456
密钥生产环境也不建议放在配置文件中,这样很容易可以通过密钥获取敏感信息。密钥建议放到启动脚本或者环境变量中。
4、密文加密
准备好了敏感信息和密钥那如何加密呢,可采用如下方法加密:
String salt = "123456"; //密钥
String str = "123456"; //待加密字符串
System.setProperty("jasypt.encryptor.password", salt);
StringEncryptor stringEncryptor = new DefaultLazyEncryptor(new StandardEnvironment());//加密方法
System.out.println(stringEncryptor.encrypt(str));//解密方法
System.out.println(stringEncryptor.decrypt(stringEncryptor.encrypt(str)));//断言结果对比
Assert.assertEquals(stringEncryptor.decrypt(stringEncryptor.encrypt(str)),str);
部署加密规范
我们研发环境是敏感信息无需加密,其他环境都需要加密部署。
关注公众号,发送 yys 获取《云原生架构白皮书》。