Spring Boot: 加密應用配置文件敏感信息

背景

  1. 咱們的應用以前使用的是Druid數據庫鏈接池,因爲需求咱們遷移到HikariCP鏈接池,druid 數據源加密提供了多種方式:
  • 能夠在配置文件my.properties中指定config.decrypt=true
  • 也能夠在DruidDataSource的ConnectionProperties中指定config.decrypt=true
  • 也能夠在jvm啓動參數中指定-Ddruid.config.decrypt=true
    可是HikariCP 默認沒有提供實現數據源加解密的方法
  1. 應用中會存在多個須要配置敏感信息(好比stfp等),都須要加密,相似於druid加解密方式依賴於工具類的實現,沒有統一的加解密標準,麻煩、並且很差維護。

Spring Cloud Config 的解決方案

  1. Config Server 加解密依賴JDK的JCE。 JDK8的下載地址html

  2. 配置config serve encrypt.key=foojava

  3. 使用config server 提供的加解密接口生成密文git

curl localhost:4001/encrypt -d lengleng
密文

複製代碼
  1. 配置文件使用密文
spring:
  datasource:
    password: '{ciper}密文'

xxx: '{ciper}密文'    
    
複製代碼
  1. 其餘的非對稱加密等高級配置,參考官方文檔。注意一個bug (No key was installed for encryption service

jasypt 的解決方案

  1. Maven依賴
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>1.16</version>
</dependency>
複製代碼
  1. 配置
jasypt:
  encryptor:
    password: foo #根密碼
複製代碼
  1. 調用JAVA API 生成密文
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = PigAdminApplication.class)
public class PigAdminApplicationTest {
	@Autowired
	private StringEncryptor stringEncryptor;

	@Test
	public void testEnvironmentProperties() {
		System.out.println(stringEncryptor.encrypt("lengleng"));
	}

}

複製代碼
  1. 配置文件中使用密文
spring:
  datasource:
    password: ENC(密文)

xxx: ENC(密文)
複製代碼
  1. 其餘非對稱等高級配置參考
Key Required
jasypt.encryptor.password True 根密碼
jasypt.encryptor.algorithm False PBEWithMD5AndDES
jasypt.encryptor.keyObtentionIterations False 1000
jasypt.encryptor.poolSize False 1
jasypt.encryptor.providerName False SunJCE
jasypt.encryptor.saltGeneratorClassname False org.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.stringOutputType False base64
jasypt.encryptor.proxyPropertySources False false

總結

  1. Spring Cloud Config 提供了統一的加解密方式,方便使用,可是若是應用配置沒有走配置中心,那麼加解密過濾是無效的;依賴JCE 對於低版本spring cloud的兼容性很差。
  2. jasypt 功能更爲強大,支持的加密方式更多,可是若是多個微服務,須要每一個服務模塊引入依賴配置,較爲麻煩;可是功能強大 、靈活。
  3. 我的選擇 jasypt
  4. 源碼參考: 基於Spring Cloud、JWT 的微服務權限系統設計
相關文章
相關標籤/搜索