SpringCloud config配置文件加密
时间:2022-05-08
本文章向大家介绍SpringCloud config配置文件加密,主要内容包括一、前言、二、配置、三、拓展、2. 另一种配置文件加密、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
一、前言
配置文件中,有些敏感数据需要加密处理。
SpringCloud config server可以结合jce实现这个功能。
二、配置
- 下载jce
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
- 替换java_home/jre/lib/security下的两个jar包
- config server配置
配置文件添加
encrypt:
key-store:
alias: mytestkey
location: server-rsa.jks
password: pppppppp
secret: ssssssss
- 测试加密解密
启动eureka、config-server
可以使用curl和postman测试/enrypt、/derypt,如果加密解密结果一致就没问题。
- 生成证书
keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass ssssssss -keystore server-rsa.jks -storepass pppppppp
在文件夹找到生成的server-rsa.jks,复制到项目classpath。
- 配置中心
加密test 在rsatest-dev.yml添加以下内容
profile: '{cipher}AQCjXw/kh/GoWo/rjBB48ISnT1A74hsXg1AaVZRuOfJN0BmoiKSqJYtY/ivwe6mCOXTT3rb6ttI+fmz1zUYkjyomlU2owwz6uG6nBMuMSQdiS2ExMFGPfZwovfYbg/0IijxQ2+UDr51nNzDtTXAvAo6DhlkoCGC1MEHcRyakOg7SD1hYwUoAxls5A2v+8934iKIP2tVd+YEzHkDMYG5BS1XkiXLBV6ctVRerdlNO5XYqR7l9k8KP4uehTkZDYnuF3oJpf3ZMDHnimk9KH0KKgds3CC63X4bPPb9Ytetx/CrdZlpK9/VwQqe6b4HIu7KLM4TfsWKKiyI6n2jZ+8gEuLigfRovFQjCkG+EvMmMJKNDll/x0q47T2S1+CX4JXNAMd0='
{cipher}后的内容是待解密内容
- 访问配置
访问ip:port/rsatest-dev.yml
key-store配置正确情况下,可以看到profile: test
配置错误,会看到 invalid: profile:
三、拓展
1. git使用ssh登陆
因为git账号暴露也是不好的。
修改git配置
cloud:
config:
server:
git:
uri: git@gitee.com:unclehh/springcloudConfig.git
searchPaths: repo
需要生成ssh
git config --global user.name “name”
git config --global user.email “email”
ssh-keygen -t rsa
在C:user....sh下会生出私钥文件id_rsa和公钥id_rsa.pub,复制id_rsa.pub的内容。
然后放到github或者其他git平台的ssh。
之后访问配置,会出现com.jcraft.jsch.JSchException: UnknownHostKey错。
需要在.ssh/下know_hosts文件添加公钥。
在linux上道理也是一样。
2. 另一种配置文件加密
jasypt安全框架继承springboot,可以实现配置加载前解密。
具体操作:
- 添加pom
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.16</version>
</dependency>
- demo
// 密钥
private static final String KEY = "1234567a?";
public static void main(String[] args) {
String ciphertext1 = encrypt("abcdefg"); // Wu11fsC0gpgSET5aU8GXUA==
String ciphertext2 = encrypt("abcdefg"); // ESXlHsVk2YM7mGcHy2ccGg==
System.out.println(ciphertext1);
System.out.println(ciphertext2);
String text1 = decrypt(ciphertext1);
String text2 = decrypt(ciphertext2);
System.out.println(text1); // abcdefg
System.out.println(text2); // abcdefg
}
/**
* 加密
*
* @param text 明文
* @return 密文
*/
public static String encrypt(String text) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(KEY);
return encryptor.encrypt(text);
}
/**
* 解密
*
* @param ciphertext 密文
* @return 明文
*/
public static String decrypt(String ciphertext) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("e!Jd&ljyJ^e4I5oU");
return encryptor.decrypt(ciphertext);
}
- 具体使用
配置加上
jasypt:
encryptor:
password: e!Jd&ljyJ^e4I5oU # 密钥
xxx:
password: ENC(jWgGELCkuxRuCI2Aqa6cF9VCxYpuKEZr)
ENC()里是待解密内容。
- 吐槽
虽然这种只是骗小孩子的一种方式,但是一眼看不懂明文密码还行。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 通过Jenkins发布php代码
- 初识Spring
- 使用Python的BeautifulSoup库实现一个可以爬取1000条百度百科数据的爬虫
- 初识Spark
- 初识SpringBoot
- MyBatis结果集映射
- Hadoop分布式集群环境搭建
- 使用Hadoop统计日志数据
- Mybatis在接口上使用注解配置SQL语句以及接口与xml一起使用
- 分布式计算框架MapReduce
- 安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc
- SpringMVC数据类型转换器与国际化配置
- 分布式资源调度——YARN框架
- 在SpringMVC中使用数据验证组件——hibernate-validator
- 我的 2020 iOS BAT 面试心得