本文说明了如何开启和使用JHipster-Registry的加解密功能。
1 整体规划
1.1 名词说明
名词 | 说明 | 备注 |
---|---|---|
对称加密 | 最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。 | 直接在bootstrap.yml文件中设置好key |
非对称加密 | 非对称加密使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。 | 需要通过keytool工具生成密钥对,并放置在Jhipster-Registry的类路径下。 |
1.2 相关组件
组件名 | 说明 | 版本 |
---|---|---|
Jhipster-Registry | 基于eureka和spring cloud config的基础服务。 | v3.2.4 |
myClient | 一个客户端服务,用于测试加解密效果。 | 1.0 |
GitLab配置库 | Jhipster-Registry引用的GitLab仓库。所有的配置文件所在地。 |
2 JhipsterRegistry设置
2.1 对称加密设置
a) 修改bootstrap.yml
spring:
cloud:
config:
server:
encrypt:
enabled: true # 开启加解密endpoint
# 设置对称密钥
encrypt:
key: changeit
b) 构建并重新启动JhipsterRegistry服务
2.2 非对称加密设置
a) 生成密钥对
$ keytool -genkeypair -alias configkey -keyalg \
RSA -dname "C=CN,ST=GD,L=GZ,O=YOURCOMPANY,OU=YOURCOMPANY,CN=registry" \
-keypass changeit1 -storepass changeit2 -keystore config-server.jks
b) 将config-server.jks放到jhipster-registry的src/main/resources目录下
c) 修改bootstrap.yml
spring:
cloud:
config:
server:
encrypt:
enabled: true # 开启加解密endpoint
encrypt:
keyStore: # 非对称加密
location: classpath:/config-server.jks # jks文件的路径
password: changeit2 # storepass,和生成密钥时的参数值保持一致
alias: configkey # alias,和生成密钥时的参数值保持一致
secret: changeit1 # keypass,和生成密钥时的参数值保持一致
d) 构建并重新启动JhipsterRegistry服务
3 测试效果
3.1 使用加解密功能
a) 通过UI使用加解密功能
http://yourdomain:8761/#/encryption
b) 通过命令行使用加解密功能
$ curl yourdomain:8761/encrypt -d <要加密的明文>
$ curl yourdomain:8761/decrypt -d <想要解密的密文>
3.2 加密应用的配置信息
a) 加密myClient的数据库密码的明文信息
$ curl yourdomain:8761/encrypt -d my-secret-pw
b) 获得数据库密码的密文信息
{cipher}188e937623c258e8ca180b798………………………a4eb20ff5ff3568cf
c) 保存密文到myClient的application-prod.yml
spring:
datasource:
username: root
password: '{cipher}188e937623c258e8ca180b798………………………a4eb20ff5ff3568cf'
# 注意yml文件中密文要放在单引号中
d) 上传application-prod.yml到GitLab仓库
e) 通过jhipster-registry的管理页面查看配置属性password,验证值是否已经解密:
http://yourdomain:8761/#/config