九、Spring Cloud Config Server详解(五):Spring Cloud Config与JCE实现配置文件的加解密

版权声明:本文为博主原创文章,转载请注明出处。作者:杨雄进 https://blog.csdn.net/makyan/article/details/88778823

9.6.Config加解密


我们的配置文件放到云端或其他服务器,配置文件中会有很多敏感信息,如数据库密码等,
这些信息如果以明文存储和传输是很危险的,为了解决这个问题,Config提供了对属性加密解密的功能,
只需要在敏感信息的值加密后加上前缀{cipher},这主要是为了防止密文被用做密码并意外泄露。


9.6.1.对称加解密:JCE方式


1、在JVM中安装全功能JCE


要使用加密和解密功能,您需要在JVM中安装全功能JCE(默认情况下不包括它),从oracle下载
JCE for JDK8下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
解压后将unlimited下的两个jar包复制到{JAVA_HOME}/jre/lib/security目录下
(将JRE lib / security目录中的两个策略文件替换为您下载的那些)


2、创建一个工程


从futurecloud-config-server复制一份,生成新的项目 futurecloud-config-server-jce
不需要而外添加依赖。

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入spring cloud config server依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

配置启动类FutruecloudConfigServerJceApplication

@SpringBootApplication
@EnableConfigServer
public class FutruecloudConfigServerJceApplication
{
    public static void main( String[] args )
    {

        SpringApplication.run(FutruecloudConfigServerJceApplication.class);
    }
}

配置秘钥:在bootstrap.yml中配置

encrypt:
  key: yangxj

加密的时候会用到这个key,记住一定要写在 bootstrap.yml 文件中,否则会报
{“description”:“No key was installed for encryption service”,“status”:“NO_KEY”} 这个问题。
意思就是加解密的时候,会使用 environment 类型 的 encrypt key ,只有在bootstrap中加载encrypt key才会变成环境变量。
配置application.yml文件

server:
  port: 8979 #程序启动端口,也就是tomcat的端口
spring:
  application:
    name: futurecloud-config-server-jce #应用名称,别名
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/makyan/futurecloud-config  # 默认访问路径
          clone-on-start: true # 启动时候就clone配置仓库
        default-application-name: futurecloud-config

3、测试
启动服务futurecloud-config-server-jce

因为JCE加解密的请求,是POST方式,所以我们在dos下使用命令方式,
也可以使用第三方工具如POSTMAN、RestClient等来访问/encrypt和/decrypt接口。


加密过程:

curl -X POST http://localhost:8979/encrypt -d ThisIsPassword

在这里插入图片描述


解密过程:

curl -X POST http://localhost:8979/decrypt -d a649adc85299fcfe4b1a0b3a5496272a8f58d7e2d35b8c07db213a8c9ae81055

在这里插入图片描述


注:Spring Cloud 暴露出了几个端点:

/encrypt/status:查看加密功能状态的端点
/key:查看密钥的端点
/encrypt:对请求的body内容进行加密的端点
/decrypt:对请求的body内容进行解密的端点

在没有设置密钥的时候,访问/encrypt/status端点会出现如下错误:

{
    "description":"No key was installed for encryption service",
    "status":""
}

4、以上我们验证了JCE的用法,现在我们将JCE加密的密文,放在配置文件并上传到云端(gitee中)
在这里插入图片描述
密文放在配置文件,需在密文前添加{cipher} 。

注意:.yml配置文件需要使用单引号括起来要解密的内容,.properties文件中的加密值不得用引号括起来。否则,该值不会被解密。

6、访问 : http://localhost:8979/master/futurecloud-config-jce.yml
在这里插入图片描述
注意:上传到云端的yml配置文件中,不同出现中文注释,否则会因为编码问题,而无法读取配置文件。
如下配置,有中文注释,由于编码问题就出现无法读取的情况。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/makyan/article/details/88778823