隐藏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的连接信息加密
###