快捷搜索:  汽车  科技

springcloudconfig服务器与客户端(SpringCloud之Config)

springcloudconfig服务器与客户端(SpringCloud之Config)并且增加如下配置:这些都准备好了后,我们在cloud_config的resource下创建一个bootstrap.yml对称加密是指加密的密钥和解密的密钥一致,例如 A 和 B 之间要通信,为了防止别人偷听,两个人提前约定好一个密钥。每次发消息时, A 使用这个密钥对要发送的消息进行加密,B 收到消息后则使用相同的密钥对消息进行解密。这是对称加密,常见的算法有 DES、3DES、AES 等。将 local_policy.jar 和 US_export_policy.jar 两个文件拷贝到 JDK 的安装目录下,具体位置是 %JAVA_HOME%\jre\lib\security ,如果该目录下有同名文件,则直接覆盖即可。下面我们开始创建工程实现。首先我们创建一个父工程叫cloud-config-salt的普通maven工程,然后再创建一个cloudConfig作为子工程 再创建一个clou

在非分布式环境下,一些由运维工程师掌握的敏感信息现在不得不写在配置文件中了,这样网传的程序员删库跑路的段子可能就成真了!但是在微服务中,我们又不太可能让运维工程师手动去维护这些信息,因为工作量太大了,那么一个好的办法,就是对这些配置信息进行加密,这也是我们本文要说的重点。

常见加密方法

说到加密,需要先和大家来捋一捋一些常见的加密策略,首先,从整体上来说,加密分为两大类:

  • 不可逆加密
  • 可逆加密

不可逆加密就是大家熟知的在 Spring Security 或者 Shiro 这一类安全管理框架中我们对密码加密经常采取的方案。这种加密算法的特点就是不可逆,即理论上无法使用加密后的密文推算出明文,常见的算法如 MD5 消息摘要算法以及 SHA 安全散列算法, SHA 又分为不同版本,这种不可逆加密相信大家在密码加密中经常见到。

可逆算法看名字就知道,这种算法是可以根据密文推断出明文的,可逆算法又分为两大类:

  • 对称加密
  • 非对称加密

对称加密是指加密的密钥和解密的密钥一致,例如 A 和 B 之间要通信,为了防止别人偷听,两个人提前约定好一个密钥。每次发消息时, A 使用这个密钥对要发送的消息进行加密,B 收到消息后则使用相同的密钥对消息进行解密。这是对称加密,常见的算法有 DES、3DES、AES 等。

将 local_policy.jar 和 US_export_policy.jar 两个文件拷贝到 JDK 的安装目录下,具体位置是 %JAVA_HOME%\jre\lib\security ,如果该目录下有同名文件,则直接覆盖即可。

下面我们开始创建工程实现。首先我们创建一个父工程叫cloud-config-salt的普通maven工程,然后再创建一个cloudConfig作为子工程 再创建一个cloudRepo作为子工程。然后我们在cloudConfig的目录下创建两个SpringBoot工程,分别是config_client和config_server,然后再cloudRepo的目录下创建一个client1的文件夹用来放配置文件。

这些都准备好了后,我们在cloud_config的resource下创建一个bootstrap.yml

并且增加如下配置:

springcloudconfig服务器与客户端(SpringCloud之Config)(1)

可以看到访问这个接口返回的是ok,说明是没有问题的。

我们使用post方法来访问http://localhost:8081/encrypt 加密接口:

springcloudconfig服务器与客户端(SpringCloud之Config)(2)

这里我们对普通对文本内容:love coding进行了加密,加密返回后内容如下:

springcloudconfig服务器与客户端(SpringCloud之Config)(3)

拿到加密后的字符串后,我们肯定要进行解密,那么我们访问解密接口http://127.0.0.1:8081/decrypt

springcloudconfig服务器与客户端(SpringCloud之Config)(4)

传入已经加密的字符串,然后得到解密的字符串:

springcloudconfig服务器与客户端(SpringCloud之Config)(5)

这样就完成了解密。

当然这只是在本地仓库中使用,那么我修改v本地仓库中的config-server-dev.yml配置文件。将加密的字符串拷贝进来如下:

springcloudconfig服务器与客户端(SpringCloud之Config)(6)

这就是config-server-dev.yml中的内容,注意{cipher} 不要忘记了。只有加上它我们才能解密。

这样修改完成后,我们需要同步到github仓库,这里步骤就不阐述了。

然后我们创建一个config_client项目,然后作为子项目,并且加入config client的依赖:

springcloudconfig服务器与客户端(SpringCloud之Config)(7)

加入依赖后,我们创建一个HelloController如下:

springcloudconfig服务器与客户端(SpringCloud之Config)(8)

其中的love 就是我们从远端仓库读取的配置名称。

然后我们访问http://localhost:8002/hello 结果如下:

springcloudconfig服务器与客户端(SpringCloud之Config)(9)

我们的远端解密就完成了。

非对称解密

当然我们也可以使用非对称加密的方式来对配置文件进行加密,非对称加密要求我们先有一个密钥,密钥的生成我们可以使用 JDK 中自带的 keytool。keytool 是一个 Java 自带的数字证书管理工具 ,keytool 将密钥(key)和证书 (certificates) 存在一个称为 keystore 的文件中。具体操作步骤如下:

首先打开命令行窗口,输入如下命令:

springcloudconfig服务器与客户端(SpringCloud之Config)(10)

上面参数的解释如下:

-genkeypair 表示生成密钥对

-alias 表示 keystore 关联的别名

-keyalg 表示指定密钥生成的算法

-keystore 指定密钥库的位置和名称

执行过程中,密钥库口令需要牢记,这个我们在后面还会用到。其它的信息可以输入也可以直接回车表示 Unknown ,自己做练习无所谓,实际开发中还是建议如实填写。好了,这个命令执行完成后,在 /Users/zhoubiao/Desktop路径下就会生成一个名为 config-server.keystore 的文件,将这个文件直接拷贝到 config_server 项目的 classpath 下,如下:

springcloudconfig服务器与客户端(SpringCloud之Config)(11)

然后在 config_server 的 bootstrap.yml 文件中,添加如下配置(注意注释掉对称加密时的那一行配置:

springcloudconfig服务器与客户端(SpringCloud之Config)(12)

配置完成后,重新启动 config_server 。启动成功后,加密解密的链接地址和对称加密都是一样的,因此,我们可以继续 http://localhost:8081/decrypt 对文本进行加密:

springcloudconfig服务器与客户端(SpringCloud之Config)(13)

加密后的字符串:

springcloudconfig服务器与客户端(SpringCloud之Config)(14)

然后访问 http://localhost:8081/decrypt 进行解密:

springcloudconfig服务器与客户端(SpringCloud之Config)(15)

解密后的字符串

springcloudconfig服务器与客户端(SpringCloud之Config)(16)

那么我们需要修改本地的config-server-dev.yml配置文件新增一个加密的配置如下:

springcloudconfig服务器与客户端(SpringCloud之Config)(17)

然后上传到github仓库。然后我们修改config_client中的HelloController

springcloudconfig服务器与客户端(SpringCloud之Config)(18)

其中的name就是我们新增加的。然后我们重启config_server然后访问

springcloudconfig服务器与客户端(SpringCloud之Config)(19)

这样就完成了解密。

安全管理

目前的 config_server 存在很大的安全隐患,因为所有的数据都可以不经过 config_client 直接访问。出于数据安全考虑,我们要给 config_server 中的接口加密。在 Spring Boot 项目中,项目加密方案当然首选 Spring Security ,使用 Spring Security 也很简单,只需要在 config_server 项目中添加如下依赖即可:

springcloudconfig服务器与客户端(SpringCloud之Config)(20)

添加完成之后,重启 config_server 项目,然后浏览器中输入 http://localhost:8081/config-server/dev/master

springcloudconfig服务器与客户端(SpringCloud之Config)(21)

可以看到,此时接口已经被保护起来了,必须要登录之后才能访问,我们输入用户名jishu,密码123456 就可以访问我们远端的配置文件了。

最后,我自己是一名从事了多年开发的JAVA老程序员,辞职目前在做自己的java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的java学习干货,可以送给每一位喜欢java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:java,即可免费获取。


作者: 代码忘烦恼

来源:CSDN

springcloudconfig服务器与客户端(SpringCloud之Config)(22)

猜您喜欢: