隱藏java代碼中 - 連接數據庫、redis等含密碼信息方法【配置文件信息安全加密】
###
1、需求背景
當前項目中的數據庫密碼、Redis密碼、第三方服務 OSS 等的 secret 都是直接明文暴露在配置文件中的,從安全性的角度,非常不建議這么做,因此需要對關鍵的敏感配置信息進行加密。
2、實現方案
采用第三方的開源庫 `Jasypt` 來實現配置文件資源的加解密,加密方式為 `對稱加密`。配置文件中配置加密后的密文,`Jasypt` 會自動的解析配置文件并解密。
3、操作步驟
3.1、jasypt 官網| jar 包 下載
官網地址:
http://www.jasypt.org/
官網下載地址:
https://github.com/jasypt/jasypt/tags 本文使用jar下載地址: https://files.cnblogs.com/files/faithH/jasypt-1.9.2.zip
3.2、上傳jasypt 到本地服務器任意目錄進行加密/解密操作
# 加密 [root@test jasypt_jar_dir]# pwd /root/jasypt_jar_dir [root@test jasypt_jar_dir]# ll total 128 -rw-r--r-- 1 root root 129265 Dec 7 18:20 jasypt-1.9.2.jar #============================= [root@test02 jasypt_jar_dir]# java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=pro_connect_mysql_private_key algorithm=PBEWithMD5AndDES input=mysql_passwd_123123 ----ENVIRONMENT----------------- Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.191-b12 ----ARGUMENTS------------------- input: mysql_passwd_123123 algorithm: PBEWithMD5AndDES password: pro_connect_mysql_private_key ----OUTPUT---------------------- cWa9MZzussN4rJ+4ia1C4vVHzhmg8j5bEkeNucgVUqY= [root@test jasypt_jar_dir]# # 加密時只需要將上面命令中的 password 和 input 替換對應的值即可。 # password=pro_connect_mysql_private_key:此處需要運維同學指定(java進程中需要的私鑰信息 - 不可泄露) *** # 將OUTPUT加密后的秘聞提供給研發同學即可 ##################################### ##################################### # 解密 [root@test02 jasypt_jar_dir]# java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI password=pro_connect_mysql_private_key algorithm=PBEWithMD5AndDES input="cWa9MZzussN4rJ+4ia1C4vVHzhmg8j5bEkeNucgVUqY=" ----ENVIRONMENT----------------- Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.131-b11 ----ARGUMENTS------------------- input: cWa9MZzussN4rJ+4ia1C4vVHzhmg8j5bEkeNucgVUqY= algorithm: PBEWithMD5AndDES password: pro_connect_mysql_private_key ----OUTPUT---------------------- mysql_passwd_123123
3.3、加密命令 - 參數詳解
加密入口類:org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI
input:要加解密的字符串
password:密鑰口令
algorithm:加密算法
OUTPUT:加密后的密文
4、java進程啟動時引入私鑰信息
java -javaagent:/home/wx/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -Dskywalking_config=/home/wx/apache-skywalking-apm-bin-es7/agent/config/es-provider-quartz.config \
-Duser.timezone=Asia/Shanghai -server -Xms2g -Xmx2g -Xmn512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/wx/services/es-provider-quartz/logs/heapdump.hprof -XX:+PrintGCDateStamps \
-XX:+PrintGCDetails -Xloggc:/tmp/gc_logs/gc.log -XX:+UseParallelGC -XX:+UseParallelOldGC \
-jar es-provider-quartz.jar \
--spring.cloud.nacos.config.server-addr=10.1.3.169:8848 --spring.cloud.nacos.discovery.server-addr=10.1.3.169:8848 \
--jasypt.encryptor.password=pro_connect_mysql_private_key \
--spring.profiles.active=pro
# 上述啟動java進程后 可解密OUTPUT公鑰信息,此時完成java的連接信息加密
###
浙公網安備 33010602011771號