SpringBoot_加密配置中的敏感信息


數據用戶名和數據庫密碼加密為例

我們將使用https://github.com/ulisesbocchio/jasypt-spring-boot這個開源項目提供的實現和插件,來幫助我們輕松的完成配置信息的加密。

1、引入包

pom.xml中引入jasypt提供的Spring Boot Starter

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

2、配置加/解的密碼

在配置文件 application.yml 中加入加密需要使用的密碼,如:

# jasypt加密的密匙
jasypt:
  encryptor:
    password: ABCDEFGHIJK

3、測試用例中生成加密后的秘鑰

     @Test
     void getEncrypt() {
         //對敏感信息進行加密
         String url = encrypt.encrypt("jdbc:mysql://localhost:3306/demo");
         String name = encrypt.encrypt("root");
         String password = encrypt.encrypt("123456");
         System.out.println(url+"----------------");
         System.out.println(name+"----------------");
         System.out.println(password+"----------------");
     }

結果:

jJW8vLCvy1NJc7Z37+MHY++2IxbAIU3F2PKywvVPgleSb+Y6VtLgQwrsI4YnOPkGg2+EPRWuhTftpv2iY4ck7mxTnXodNmMHarAS2Dvyp3c=----------------
rYXxJV6dq1R5Nlbgf+oKnVHORjarrzc3YkANKwJvUhbDz+MLs1TZwTZm/yr9aQdM----------------
w0/NoJF2XzxkDqRlGWgmslXcpTlVNQfqv+ylCFAae5SthDbpSsaMqickUsib0h0m----------------

4、將加密后的字符串替換原明文

# jasypt加密的密匙
jasypt:
  encryptor:
    password: ABCDEFGHIJK
 ​
mysql:
  url: ENC(FJqflLlLzTa2t8MvOUh5R6wGp8xgt1c7jbqm/AawsRSJvwySrN03P0CiVYT3a9kUEQqeQ7ly4ZDEGssAISUM9bZ/8KQZgo2SOEj/S05aBaI=)
  username: ENC(/v+5Q5u4oOCSyps9RdPhL/xlghEoXSL0uptr1npRoC9I3egOuWjYTJexkGGGgwp+)
  password: ENC(Hsqq32hosJvUKjA25e1hNq7TfkU+YiLNOYXzn6XWK51oE4LUWAeGcfSCh2Z/poz2)
 

注意: ENC()DEC()一樣都是 jasypt 提供的標識,分別用來標識括號內的是加密后的內容和待加密的內容。


5、測試

javaBean:

@Data
@Component
@ConfigurationProperties(prefix = "mysql")
public class Mysql {
    private String url;
    private String username;
    private String password;
}

測試:

    @Autowired
    private Mysql mysql;

    @Test
    void test() {
        System.out.println("mysql = " + mysql);
    }

結果:

mysql = Mysql(url=jdbc:mysql://localhost:3306/demo, username=root, password=123456)

在springboot項目加載的時候就會將加密信息進行解密,就獲得了我們之前的username和password了。


6、思考

根據上面的步驟,愛思考的你,也許會發現這樣的問題:雖然敏感信息是加密了,但是我們通過配置文件也能看到jasypt.encryptor.password信息,我們是不是通過利用這個再把原始信息解密出來,這樣的話豈不是還是不安全?

上面的實現方式的確是會有這樣的問題!所以,在實際應用的過程中,jasypt.encryptor.password的配置,可以通過運維小伙伴在環境變量或啟動參數中注入,而不是由開發人員在配置文件中指定。

 

部署時配置salt(鹽)值

  1. 為了防止salt(鹽)泄露,反解出密碼.可以在項目部署的時候使用命令傳入salt(鹽)值:

    java -jar xxx.jar  -Djasypt.encryptor.password=Y6M9fAJQdU7jNp5MW
  2. 或者在服務器的環境變量里配置,進一步提高安全性,打開/etc/profile文件

    vim /etc/profile

    profile 文件末尾插入salt(鹽)變量

    export JASYPT_PASSWORD = Y6M9fAJQdU7jNp5MW

    編譯,使配置文件生效

    source /etc/profile

    運行

    java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM