在非分布式环境下,一些由运维工程师掌握的敏感信息现在不得不写在配置文件中了,这样网传的程序员删库跑路的段子可能就成真了!但是在微服务中,我们又不太可能让运维工程师手动去维护这些信息,因为工作量太大了,那么一个好的办法,就是对这些配置信息进行加密,这也是我们本文要说的重点。
常见加密方法
说到加密,需要先和大家来捋一捋一些常见的加密策略,首先,从整体上来说,加密分为两大类:
- 不可逆加密
- 可逆加密
不可逆加密就是大家熟知的在 Spring Security 或者 Shiro 这一类安全管理框架中我们对密码加密经常采取的方案。这种加密算法的特点就是不可逆,即理论上无法使用加密后的密文推算出明文,常见的算法如 MD5 消息摘要算法以及 SHA 安全散列算法, SHA 又分为不同版本,这种不可逆加密相信大家在密码加密中经常见到。
可逆算法看名字就知道,这种算法是可以根据密文推断出明文的,可逆算法又分为两大类:
- 对称加密
- 非对称加密
对称加密是指加密的密钥和解密的密钥一致,例如 A 和 B 之间要通信,为了防止别人偷听,两个人提前约定好一个密钥。每次发消息时, A 使用这个密钥对要发送的消息进行加密,B 收到消息后则使用相同的密钥对消息进行解密。这是对称加密,常见的算法有 DES、3DES、AES 等。
对称加密在一些场景下并不适用,特别是在一些一对多的通信场景下,于是又有了非对称加密,非对称加密就是加密的密钥和解密的密钥不是同一个,加密的密钥叫做公钥,这个可以公开告诉任何人,解密的密钥叫做私钥,只有自己知道。非对称加密不仅可以用来做加密,也可以用来做签名,使用场景还是非常多的,常见的加密算法是 RSA 。
配置文件加密肯定是可逆加密,不然给我一个加密后的字符串,我拿着也没用,还是没法使用。可逆算法中的对称加密和非对称加密在 Spring Cloud Config 中都得到支持,下面我们就分别来看。
对称加密
Java 中提供了一套用于实现加密、密钥生成等功能的包 JCE(Java Cryptography Extension),这些包提供了对称、非对称、块和流密码的加密支持,但是默认的 JCE 是一个有限长度的 JCE ,我们需要到 Oracle 官网去下载一个不限长度的 JCE :
下载完成后,将下载文件解压,解压后的文件包含如下三个文件:
将 local_policy.jar 和 US_export_policy.jar 两个文件拷