摘要:配置文件密碼加密配置秘鑰加密算法從版本開始,默認(rèn)的加密解密算法已更改為以下版本默認(rèn)為上述不配置的話,其默認(rèn)的秘鑰也是以上的并不是很多人理解的鹽,這是加密密鑰。思考以上的步驟中,根據(jù)的用法,基本上完成了對配置文件中密碼的加密。
作者:追夢1819
原文:https://www.cnblogs.com/yanfei1819/p/15565862.html
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
公眾號:追夢1819
項目中的配置文件會有密碼的存在,例如數(shù)據(jù)庫的密碼、郵箱的密碼、FTP的密碼等。
配置的密碼以明文的方式暴露,并不是一種安全的方式,特別是大型項目的生產(chǎn)環(huán)境中,因為配置文件經(jīng)手的(運維)人員可能很多,也可能是多方的(甲方、乙方甚至第三方)。本文講述基于 SpringBoot 項目對配置文件中的密碼進(jìn)行加密。
本文實例中密碼加密主要用到的是 Jasypt,一個Java的加解密庫。
1、在項目中引入以下依賴。
com.github.ulisesbocchio jasypt-spring-boot 1.18 org.jasypt jasypt 1.9.2
2、在application.yml
文件中添加以下配置信息。
# 配置文件密碼加密配置jasypt: encryptor: password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7 # 秘鑰 algorithm: PBEWithMD5AndDES # 加密算法 iv-generator-classname: org.jasypt.iv.NoIvGenerator
(1)從
3.0.0jasypt-spring-boot
版本開始,默認(rèn)的加密/解密算法已更改為PBEWITHHMACSHA512ANDAES_256
;3.0.0以下版本默認(rèn)為PBEWithMD5AndDES
;(2)上述
algorithm
不配置的話,其默認(rèn)的秘鑰也是PBEWithMD5AndDES
;(3)以上的
jasypt.encryptor.password
并不是很多人理解的salt
(鹽),這是加密密鑰。代碼中的salt是隨機生成的,長度默認(rèn)為8位,生成類默認(rèn)是org.jasypt.salt.RandomSaltGenerator
,可以通過配置jasypt.encryptor.salt-generator-classname
來修改。
3、通過命令獲取密文。
java -cp /Users/shiyanfei/zlb/repository/repository-zlb/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="Mysql@1234" password=idss@2021 algorithm=PBEWithMD5AndDES
終端執(zhí)行上述命令會生成密文,其中:
/Users/shiyanfei/zlb/repository/repository-zlb/org/jasypt/jasypt/1.9.2/
是 jasypt-1.9.2.jar
的路徑(Linux環(huán)境中應(yīng)該是在/lib包下面),根據(jù)需求修改;4、修改原來的密碼配置
原來的明文密碼值,改為
ENC(xxx)
,其中xxx是密文。
例如:
1)MySQL
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/ueba?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&&useSSL=false driver-class-name: com.mysql.jdbc.Driver username: root password: ENC(2RP1Vdsa+2wdSOgu2biAJkTCU9fnkUGD)
2)Redis
spring: redis: database: 0 host: 10.20.24.48 port: 6379 password: ENC(JjPTg5GOsjV9ZBIQ2CaHr+96UgMKBgIT)
5、添加注解
啟動類上添加@EnableEncryptableProperties
。
思考:以上的步驟中,根據(jù) Jasypt 的用法,基本上完成了對配置文件中密碼的加密。但是,請思考一下,這樣處理是否真的安全合理?
如果按照嚴(yán)格的要求來,這樣處理并不是完善的。因為秘鑰和密文都暴露出來,依然是不安全的。那么,要如何處理呢?以下是我其中的一個思路,并已在項目中實踐。
1、首先,秘鑰通過另一個小工具生成,該小工具與項目無關(guān);
小工具是一個獨立的完整程序,有打包腳本和啟停腳本。篇幅所限,已將源碼上傳至 GitHub。
2、其次,秘鑰不暴露在配置文件中,而寫入代碼中(正常情況下,秘鑰基本不會變動);
/************************ CHANGE REPORT HISTORY ******************************/ ** Product VERSION,UPDATED BY,UPDATE DATE * * DESCRIPTION OF CHANGE: modify(M),add(+),del(-) * *-----------------------------------------------------------------------------* * V3.0.12,shiyanfei,2021-09-14 * create * *************************** END OF CHANGE REPORT HISTORY ********************/package com.idss.radar.common.ums.bean;import org.jasypt.encryption.StringEncryptor;import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author : shiyanfei * @description : 自動配置加密信息
* @see : com.idss.radar.common.ums.bean * @since : 2021-09-14 */@Configurationpublic class EncryptorConfig { @Bean("jasyptStringEncryptor") public StringEncryptor jasyptStringEncryptor() { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7"); // 注釋部分為配置默認(rèn) config.setAlgorithm("PBEWithMD5AndDES");// config.setKeyObtentionIterations("1000"); config.setPoolSize("1");// config.setProviderName("SunJCE");// config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");// config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");// config.setStringOutputType("base64"); encryptor.setConfig(config); return encryptor; }}
3、刪除配置文件中的信息
# 配置文件密碼加密配置jasypt: encryptor: password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7 # 秘鑰 algorithm: PBEWithMD5AndDES # 加密算法 iv-generator-classname: org.jasypt.iv.NoIvGenerator
4、以上處理還有一個好處,就是優(yōu)化后的項目,既支持明文,也支持密文,密文只要加函數(shù) ENC(xxxx)
。
解決問題的方案沒有最好的,只有更好的。隨著要求的不斷提高,思考的不斷深入,解決問題的方案才會逐步趨近完美。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123638.html
摘要:所以這里我們就需要對數(shù)據(jù)庫的用戶名和密碼進(jìn)行加密,這也是本文的由來。本文采用對配置文件加密的相關(guān)方法,其實呢,也還有其他方案,具體的會在后面的相關(guān)文章中說明。 前言 在日前安全形勢越來越嚴(yán)重的情況下,讓我意識到在項目中存在一個我們經(jīng)常忽略的漏洞,那就是我們的項目的配置文件中配置信息的安全,尤其是數(shù)據(jù)庫連接的用戶名和密碼的安全。所以這里我們就需要對數(shù)據(jù)庫的用戶名和密碼進(jìn)行加密,這也是本文...
摘要:通過購買免費的證書購買地址詳細(xì)操作請點擊免費申請阿里云賽門企業(yè)級鐵克證書在上面配置我們現(xiàn)在這里只講解在阿里云下購買的證書進(jìn)行配置,現(xiàn)在都有了證書,現(xiàn)在我們來配置。 最近項目中的網(wǎng)站要設(shè)置https,雖然進(jìn)入軟件行業(yè)6年了,配置這個還是顯得信心不足,還好網(wǎng)上有好多網(wǎng)友分享的文章可以從中學(xué)習(xí),但是有優(yōu)也有劣,憑我自己的一點經(jīng)驗從中甄選出好一點的文章跟大家分享一下。 1、什么是Https? ...
摘要:這里使用的是數(shù)據(jù)庫啟動類上加上注解在啟動類中添加對包掃描掃描多個包下的可以有以下幾種方法掃描會自動加載相關(guān)配置,數(shù)據(jù)源就會自動注入到中,會自動注入到中,可以直接使用。有配置文件下的使用掃描多個包下的可以有以下幾種方法掃描 Spring-Boot 學(xué)習(xí)筆記 1 Spring-Boot 介紹 1.1 什么是Spring-Boot Spring-Boot是由Pivotal團隊提供的全新框架...
閱讀 2501·2023-04-25 22:09
閱讀 1018·2021-11-17 17:01
閱讀 1535·2021-09-04 16:45
閱讀 2615·2021-08-03 14:02
閱讀 810·2019-08-29 17:11
閱讀 3249·2019-08-29 12:23
閱讀 1080·2019-08-29 11:10
閱讀 3276·2019-08-26 13:48