【Spring Cloud总结】36.配置属性加解密之非对称加密

接上篇《35.配置属性加解密之对称加密》  Spring Cloud版本为Finchley.SR2版

上两篇我们讲解了有关Spring Cloud Config的对称加密相关的加密和解密操作,本篇来讲解一些非对称加解密操作。
本部分官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_creating_a_key_store_for_testing
注:好像Finchley.SR2的文档已经挂了,最新的是Finchley.SR4的文档。

回忆一下上一篇我们讲到的对称加密和非对称加密的区别:。
对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。
本篇我们主要针对非对称加密进行讲解,Config Server端开启非对称加密功能需要以下几步:
1、下载安装JCE
2、使用keytool工具生成密钥文件
3、进行密钥文件的相关配置
4、进行加密解密操作

一、下载安装JCE

详细步骤见上一章。

二、使用keytool工具生成密钥文件

jdk中自带的keytool工具生成密钥文件,keytool是JDK中的一个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。
keytool工具的常见指令参数见下图:

有关生成密钥对的指令:

这里需要注意的是,genkeypair只生成公私钥对条目,私钥不可见,公钥会以证书格式保存在keystore中。

打开jdk所在的文件夹,找到%JAVA_HOME%\bin\keytool.exe,它就是keytool工具。我们打开cmd控制台,输入以下指令,进行密钥文件的创建:

keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass 123456 -keystore server.jks -storepass 123456

上面的指令,除指定了别名、加密方式以外,还指定了密钥的一些参数,如所在组织、公司、省市、国家信息,以及密钥口令和密钥库口令,存储密钥的名称。
执行完上述命令后,会在cmd的当前位置生成这个密钥文件:

三、进行密钥文件的相关配置

我们将上一步生成的server.jks文件,防止在microserver-config-server工程的src/main/resource文件夹下:

然后新增(这里我们直接修改原来的)bootstrap.yml配置文件(为什么要在bootstrap.yml里配置,原因在上一篇有讲解),进行以下配置:

encrypt:
  key-store:
    location: classpath:/server.jks
    alias: mytestkey
    password: 123456
    secret: 123456

这里配置了密钥的公钥信息,即公钥在客户端,私钥在服务端,客户端通过公钥进行加密,服务端通过私钥进行解密。

四、进行加密解密操作

我们重启microserver-config-server工程,使用postman访问加密接口encrypt,将我们的Spring-Cloud-Config-Test仓库下的application-prod.yml中的“type: prod”内容中的“prod”进行非对称加密:

将得到的密文配置到Spring-Cloud-Config-Test仓库下的application-prod.yml中:

type: '{cipher}AQA/WLsTLuWVdsf5+K3L58iMAWKlYXXwsM6UEfLWJkTaifL4Y/zVrSju78tudA39Tb+iXr8TCXL794dW//5YCOU93HIvVc9Au5UjIzs/Z6bLA8Pq2X3i2dmAdk6QEg8ihVr5sHP0ina9S00HCvl9CM7j4/IgpmIZu1M+SNDrgzmimnN/jalvLTEWtZFhScS/sEsiOe3mSpqFQ4TwcLxqtriiP8Yp93IdBCrOMB6jYukYWw0zY3+J8h2KSg4Scim1161/LrrOIT+kT0Sq4HMtRl87vAY3JtFI5sZm7D/61olvGGWCkaDRsacXA5+NVH9qkwzRi83062tn4+QF/IillWFQh0iZILkV1zv8RMPFmxjb+vXR1fqfD84vc5btFDai1lQ='

然后将该内容更新到远端仓库:


然后我们重启服务,访问 端点,发现通过Config Server可以自动解密仓库中的密文,直接反馈出明文:

至此,配置属性的非对称加密操作已经讲解完毕。

整个过程的原理就是,使用JCE模块的加密功能,结合生成的公钥,对明文进行加密操作。然后读取需要解密的密文(带{cipher}标签)后,在JCE模块中,从密钥库中取出公钥对应的私钥,进行明文的解密操作,进而得到明文。

想自己编写一个java非对称加解密的童鞋,可以看一下这篇文章:《Java结合keytool实现非对称加密和解密》
          
参考:《51CTO学院Spring Cloud高级视频》
https://blog.csdn.net/qq_36882843/article/details/81202715

转载请注明出处:https://blog.csdn.net/acmman/article/details/105456064

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值