昨天写了一篇Spring Cloud Config 编码指南,因为细节太多,网上介绍也很多,所以没写的太详细,只是说了句有问题大家一起讨论,然后就默默的提供了自己的GitHub。当时实际上还在搞一个主题,就是基于Spring Cloud Config的加解密。比如说数据库的配置,总会有数据库密码。有密码了你总不能写个明文的放在SVN上,放在上面了被别人拿走了你总不能说不怪你自己。
为此,Spring Cloud Config开发了加解密的EndPoint。官方的介绍说,使用了RSA算法。RSA加解密比DES等算法慢很多,但是也难解密很多。毕竟找大的质数很简单,而解出来不简单。
先来看看最终的实现成果。我们在SVN的配置文件中,填入加密后的密文,随后通过Spring Cloud Config Client获取,得到的是解密后的明文。填入的是密文,获取的是明文,就是这么简单。
首先,很负责的说,去下对应JDK和操作系统版本的JCE,不要抱有侥幸心理。否则你看到Illegal key size的时候,也还是要下载JCE。反正就两个jar包。下载完毕后,往jre/lib/security文件夹里一丢就行,又不占地方,也不要做配置。看清楚,是在jre目录下,不是jdk。
随后,在你的config server应用下,新建一个bootstrap.yml,填入你的密码。比如我写的就是这个。这一条在官方文档里没有做介绍,能发现完全靠的是我把Spring源代码翻来覆去看了好几圈。
encrypt:
key: showmethemoney
嗯,好久没打星际了。
application.yml里也要配置。
spring:
cloud:
config:
server:
encrypt:
enabled: true
下一步是获取加密后的密文。如果你的config server工作正常,你可以用curl来获取密文。windows下的curl需要自己折腾,直接bing就有很多,也可以到Linux底下去搞,反正不难。命令行如下。
curl http://localhost:7000/encrypt -d giveyoumillionsofdollars
返回的结果就是加密后的密文。你可以把这个密文写到你原来需要写明文的地方了。神也猜不出来你这是什么。有一点需要注意的是,yaml文件的加密字符串必须用单引号包括,properties文件的加密字符串必须不能用单引号包裹,请切实注意。然后不管你的密文是什么,一定要用打头。
以上就是config server所需要做的全部工作。剩下来的,如常,用你的client来访问,获取到的就是明文了。
领取专属 10元无门槛券
私享最新 技术干货