faith丶

导航

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

 

###

posted on 2021-12-08 10:17  faith丶  阅读(552)  评论(0编辑  收藏  举报