Spring Cloud Config 配置的加密解密

配置内容的加密解密

很多场景下很多场景下,对于某些敏感的配置内容,例如数据库账号密码等应当加密存储。Config Server为配置内容的加密与解密提供了支持。

安装JCE

Config Server的加密解密功能依赖JCE(Java Cryptography Extension)。
jdk8默认提供了,如果未在目录(/Library/Java/JavaVirtcy Machines/jdk1.8.0_151.jdk/Contents/Home/jre/lib/security)下找到policy文件夹,可以去官网下载JCE。然后放进去。

对称加密

在 Config Server 项目中 添加一个bootstrap.yml,一定要新增加配置文件,在原来的配置文件中添加配置无效。增加以下配置。

encrypt:
  key: config

然后启动项目,在终端输入curl http://localhost:8011/encrypt -d user。可以得到user的加密串。

weiweideMacBook-Pro:~ pengweiwei$ curl http://localhost:8011/encrypt -d user
b600ed1981ad0a977c219c946274f03c6ffe13626c0f1c1df5a6bc70efdcb883 

输入 curl http://localhost:8011/decrypt -d b600ed1981ad0a977c219c946274f03c6ffe13626c0f1c1df5a6bc70efdcb883

weiweideMacBook-Pro:~ pengweiwei$ curl http://localhost:8011/decrypt -d b600ed1981ad0a977c219c946274f03c6ffe13626c0f1c1df5a6bc70efdcb883
user 

说明能正常加密解密。

加密解密数据库密码

在git上新建一个文件config-dev.yml或者修改原来的properties文件。加入数据库配置。

spring:
  datasource:
    name: user
    password: '{cipher}b600ed1981ad0a977c219c946274f03c6ffe13626c0f1c1df5a6bc70efdcb883'

如果不加{cipher}的话,将不会解析出明文。访问http://localhost:8011/config-dev.yml。可以看到。
Spring Cloud Config 配置的加密解密_第1张图片
下面这种方式访问也可以。
Spring Cloud Config 配置的加密解密_第2张图片
如果想 Config Server 不解密,直接返回密文本身,由Config Client 自行解密的话。可在Config Server中加入以下配置。

spring:
  cloud:
    config:
      server:
        encrypt:
          enabled: false

非对称加密

非对称加密相对于对称加密要严格安全一些,但对称加密相对简单。

命令行执行以下命令。

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

然后将生成的 server.jks复制到Config Server的resources目录下。然后在bootstrap.yml文件中新增配置。

encrypt:
  key-store:
    location: classpath:/server.jks
    password: letmein # 这些参数和 生成server.jks文件的命令里的参数要对应
    alias: mytestkey # 这些参数和 生成server.jks文件的命令里的参数要对应
    secret: changeme # 这些参数和 生成server.jks文件的命令里的参数要对应

然后pom文件中添加资源路径的配置。

            <resources>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <filtering>truefiltering>
                    <excludes>
                        <exclude>**/*.jksexclude>
                    excludes>
                resource>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <filtering>falsefiltering>
                    <includes>
                        <include>**/*.jksinclude>
                    includes>
                resource>
            resources>

然后访问curl http://localhost:8011/encrypt -d user。如果遇到下面的错误。

{"timestamp":"2020-01-05T11:05:26.560+0000","status":500,
"error":"Internal Server Error",
"message":"Unable to initialize due to invalid secret key","path":"/encrypt"}

这就是说明JAVA_HOME/jre/lib/security下缺少JCE的包。将下载的JCE的两个jar包复制进去就好了。
Spring Cloud Config 配置的加密解密_第3张图片
然后再访问curl http://localhost:8011/encrypt -d user。就能看到结果了。

weiweideMacBook-Pro:Downloads pengweiwei$ curl http://localhost:8011/encrypt -d user
AQAUpWp6o1qL6HEViPjGe1t87nMDyEoUgMHJccV+czETNYRJWghMlKhr8Kwm39NJBcP9Xtzcu505q1wPKobv05o6+/Qi422ws+y5xg
NzLLniLWlXNO8//mFBfOTPAcOeZEOFe42rSB33CNqX2pSJFETOBJeMeBZWzE/2vqwoxWpGrSj1QpNsgHFqrz0l2cFs/hjbxYNg4c3H
SsZ5RJ6pPHCXB7ZmdlwMa4tvZZikudBw1/SfXXsWEcMelMSvuM+wjdHnRmc9pBDKVwjSpzRUg628fZiYprtXViDVNlXoSpu4I28g4j
RuDNvbS6/3ZzWQO7f5gUjfpi3PLL6bbGNTNDzTqkzmSD+sNZHldmJrdl2eOC3d/2cuSXK2qC6PsY2eaTk=

你可能感兴趣的:(Spring,Cloud)