sc-config:进阶应用之加密解密

370 阅读4分钟

这是我参与更文挑战的第 19 天,活动详情查看: 更文挑战

《配置中心 Spring Cloud Config 详解》系列文章更新,一起在技术的路上精进!本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性,除此之外就是管理相当多的服务实例的配置数据。在应用的开发阶段由各个服务自治,但是到了生产环境之后会给运维带来很大的麻烦,特别是微服务的规模比较大,配置的更新更为麻烦。为此,系统需要建立一个统一的配置管理中心。

在前面的文章,我们主要介绍了 Spring Cloud Config 本地文件系统以及属性覆盖的用法。本文将会介绍进阶应用之对称加密与解密以及非对称加密与解密。

对称加密与解密

所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

对称加解密方式比较简单,从定义可以知道,我们需要配置一个密钥。在 Config Server中配置一个秘钥如下:

encrypt:
  key: secret

启动Config Server,通过其提供的多个端点进行验证我们的配置是否正确,加密解密是否能够生效。

  • /encrypt/status端点验证Encryptor的安装状态。如curl -i "http://localhost:8888/encrypt/status"
  • /encrypt端点提供了对字符串进行加密的功能,返回密文。如curl -X POST -d "user" "http://localhost:8888/encrypt/"
  • /decrypt端点提供了对加密后的密文进行解密的供,返回明文。如curl -X POST -d "9f034a63c87496b19f86ab80b4cb0b2f463d116cbb172df0b85286a179e3afb3" "http://localhost:8888/decrypt/"

通过将需要加密的字符串进行替换,并加上前缀{cipher},Config Server在获取到这个值之后会先对值进行解密,解密之后才会返回给客户端使用。

非对称加密与解密

非对称加密算法需要两个密钥:公开密钥和私有密钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

相比于对称加密算法,非对称加密算法更加安全。使用非对称加密,我么需要生成密钥对,jdk中自带了keytool工具,执行如下命令:

keytool -genkeypair -alias config-server -keyalg RSA -keystore config-server.keystore

注意的是,设置秘钥口令,长度不能小于6。执行完成之后,会在当前目录生成一个文件server.keystore,拷贝到我们的Config Server中的src\main\resources目录下,Config Server进行如下配置:

encrypt:
  key-store:
    location: config-server.keystore
    alias: config-server
    password: 123456
    secret: 123456

我们可以使用上面对称算法中列出的端点同样进行验证,比如执行 curl -X POST -d "user" "http://localhost:8888/encrypt/",得到的结果明显更加复杂了:

AQAZL4yLLYh0CAEQKMPkg5WRvjb7Urz+7F2aeruGyG9WYCgKa1/D39DNmzrPgKmoBvCrUJT1a/O/ft8MY8d1qB8qtlG86wOhopaoiFih1kLxMnqXNH/Q4/fI/b4muOBS+OF0ChodLPUjCtwTUN6KT6ZN/9fkrFI6PCiUrHd8AZBX80LtpCoy4Ws6C20j/0Fpie6UPOn4Tdpzx1sHkFG/8itcJnWqOaNdM6FpOlKElOOIYbVdeGtEbrZ0av3xEKUPmBdkFRTwM/7VwdIcPr1qwmsBGLYLVBVHZ0YfVUJpPgBEmaVD7b9WVMP/eyEInvaSCB75qGWaqc1UVbKtS9U7KTL2lmmlr1P9TMfobsG8vwHINfv+PKeOmfcoy47va/NkqHU

小结

本文主要介绍了 Spring Cloud Config 进阶应用之对称加密与解密以及非对称加密与解密。通过对配置的加密,实现更加安全的环境信息配置。Spring Cloud Config 自身提供了对称加解密以及非对称加解密的功能。