rsa非对称加密有着非常强大的安全性,https的ssl加密就是使用这种方法进行https请求加密传输的。因为rsa算法会涉及private key和public key分别用来加密和解密,所以称为非对称加密。private key和public key有互操作性,即用private key加密的可以用public key解密,用public key加密的可以用private key解密。传统的单向认证则只用public key进行加密,有private key的一方才可进行解密。例如,一个web服务器会有一对private key和public key。浏览器客户端保存着服务器的public key。当客户端需要向服务器发送数据时,就用服务器的public key进行加密,然后服务器收到数据时,再用private key进行解密。客户端验证服务器是否为真实的服务器时,会根据服务器提供的public key和自己本地保存的public key作比较,一致的话才能验证服务器的真实性。
在我们的config server中,一些对加密要求比较高的可以采用rsa算法进行数据的加密和解密
我们需要使用jdk自带的keytool工具生成一个keystore,里边保存了private key的信息,使用如下命令行:
keytool -genkeypair -alias config-server-key -keyalg rsa -dname "cn=config server,ou=xuqian,o=my own company,l=beijing,s=beijing,c=cn" -keypass changeit -keystore server.jks -storepass changeit
上述工具将产生的 privte key 保存在了名为server.jks的 key store 中。到目前为止,我们只产生了 private key,spring cloud config server 会根据我们提供的 key 的信息,每次会用程序生成一个 public key,参考如下源代码org.springframework.security.rsa.crypto.keystorekeyfactory:
这里使用了 java security api 来对key进行操作。参见注释。然后上边的信息通过 configserver 中的 bootstrap.xml 配置文件提供:
encrypt: #key: thisismysecretkey key-store: location: file://${user.home}/development/keys/server.jks password: changeit alias: config-server-key secret: changeit
因为我们不能同时使用对称加密和非对称加密,所以我们把 encrypt.key
配置注释掉,然后指定非对称加密的参数:
我们继续使用 encrypt api加密一项测试数据
curl http://localhost:8888/encrypt -d lind123
返回加密后的字符:
aqapwouoh4wvexggvv+bgtkc5e0d5aba8vuknzexh27hyksabw+wyzdwztbk5qyfxpocas413rdenidr2ez44nkjt5v+438/vqexyszjzphp0xyxi9yiajqa3+ji+iwk8hrgtj4dzxikmitiimcoirldzzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhm57ob6sb0ivm4h4ml1n4d3qucue7hh2f4aw4oln7xueymkrpttpy8opnbeezhrfmal/auvzqulu5jjmnjk9jiwoy+dstscviy/mz+dypv6f4afddvvog89snmpzcut+zmb8jxhdjloky+63rg326wffy9opuimw6/kcwzhv6vws55hhqry713w6ydblrq/gyc3wils=
然后测试解密
curl http://localhost:8888/decrypt -d aqapwouoh4+bgtkc5e0d5aba8vuknzexh27hyksabw+wyzdwztbk5qyfxpocas413rdenidr2ez44nkjt5v+438/vqexyszjzphp0xyxi9yiajqa3+ji+iwk8hrgtj4dzxikmitiimcoirldzzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhm57ob6sb0ivm4h4ml1n4d3qucue7hh2f4aw4oln7xueymkrpttpy8opnbeezhrfmal/auvzqulu5jjmnjk9jiwoy+dstscviy/mz+dypv6f4afddvvog89snmpzcut+zmb8jxhdjloky+63rg326wffy9opuimw6/kcwzhv6vws55hhqry713w6ydblrq/gyc3wils=
会返回
lind123
添加依赖
implementation('org.springframework.security:spring-security-rsa')
bootstrap.yml内容
user: password: '{cipher}aqapwouoh4wvexggvv+bgtkc5e0d5aba8vuknzexh27hyksabw+wyzdwztbk5qyfxpocas413rdenidr2ez44nkjt5v+438/vqexyszjzphp0xyxi9yiajqa3+ji+iwk8hrgtj4dzxikmitiimcoirldzzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhm57ob6sb0ivm4h4ml1n4d3qucue7hh2f4aw4oln7xueymkrpttpy8opnbeezhrfmal/auvzqulu5jjmnjk9jiwoy+dstscviy/mz+dypv6f4afddvvog89snmpzcut+zmb8jxhdjloky+63rg326wffy9opuimw6/kcwzhv6vws55hhqry713w6ydblrq/gyc3wils='
访问:
返回内容已经解密了
{ "user.password": "23456789" }
如对本文有疑问, 点击进行留言回复!!
Spring Cloud Alibaba系列,nacos作为服务配置中心
网友评论