目前的加密还不够严格,比如说配置文件中保存有git的密码、对称加密的key 和 明文的security.user.password /spring.cloud.config.password,需要针对这三个部分进行需要进行改造。本文的基础是上一篇,已经配置好了无限长度的JCE。
一.SSH方式登录GIT
之前的config-server中,配置了git的用户名和密码,有泄漏密码的风险,可以采用密钥的方式登录git获取配置,便无需在配置文件中配置git的用户名和密码。
1. config-server的配置文件中,去掉spring.cloud.config.server.git.username和spring.cloud.config.server.git.password。
2. 将config-server所在机器的ssh公钥添加到到git仓库。
3. spring-cloud-config使用ssh方式连接git的要求是,.ssh/known_hosts中的hostkey需要是ssh-rsa格式的,其他格式则不行(如ecdsa-sha2-nistp256),如下图:
至此,解决了配置文件中暴露git用户名密码的问题。
二. 使用非对称加密
之前使用的是对称加密,在配置文件中配置encrypt.key,缺点是安全性不如非对称加密。
1.使用命令行工具,如config--server项目中使用git bash,在其中输入:
keytool -genkeypair -alias mytestkey -keyalg RSA \ -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \ -keypass changeme -keystore server.jks -storepass letmein |
---|
此时会在config-server项目中根目录产生一个server.jks文件,保存的是非对称加密的密钥,打开后是乱码。
2.将server.jks文件放入config-server项目的classpath下,在config-server项目中新建 bootstrap.yml,注意,必须是这个文件名。在其中配置如下,其中的值与生成时的命令行对应:
#非对称加密 encrypt: keyStore: location: classpath:/server.jks password: letmein alias: mytestkey secret: changeme |
---|
3. 此时,启动config-server工程,依旧可以使用/encrypt和/decrypt接口进行属性的加密和解密,不过和对称加密的相比,密文长度更长,也更安全。同时,之前对称加密的密文,无法解密:
至此,解决了暴露加密的key的问题。
三. 加密security.user.password 和 spring.cloud.config.password
之前的项目中,config-server中配置security.user.password ,通过web查看配置时需要输入此密码;config-client中配置spring.cloud.config.password,才能从config-server中获取配置。直接将明文写在工程中不是很安全,现在将其加密,加密分为对称和非对称加密。
1. 首先启动config-server,然后调用/decrypt接口,将希望设定的密码进行加密。
2. 将加密后的密文,连接上前缀{cipher},设定在config-server和config-client中:
3.如果是对称加密,在config-server和config-client的bootstrap.yml中,配置相同的encrypt.key.
如果是非对称加密,则在config-server和config-client的classpath下放置相同的前文中生成的server.jks文件,然后在二者的bootstrap.yml中配置:
encrypt: keyStore: location: classpath:/server.jks password: letmein alias: mytestkey secret: changeme |
---|
4.启动config-server和config-client,一切正常:
至此,解决了暴露security.user.password 和 spring.cloud.config.password的问题。