gpt4 book ai didi

Spring Cloud Config RSA简介及使用RSA加密配置文件的方法

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Spring Cloud Config RSA简介及使用RSA加密配置文件的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Spring Cloud 为开发人员提供了一系列的工具来快速构建分布式系统的通用模型 。例如:配置管理、服务发现、断路由、智能路由、微代理、控制总线、一次性Token、全局锁、决策竞选、分布式session、集群状态等等。分布式系统的协助需要一大堆的模型,使用Spring Cloud开发者能快速的建立支持实现这些模式的服务和应用程序。他们将适用于任何分布式环境,无论是开发者的个人电脑还是生产环境,还是云平台.

特性 。

Spring Cloud 专注于提供良好开箱即用的典型方案和可扩展方式.

  • 分布式/版本化配置
  • 服务注册/服务发现
  • 路由
  • 服务间调用
  • 负载均衡
  • 断路器
  • 全局锁
  • 领导选取和集群状态监控
  • 分布式消息

简介 。

RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的。因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以称为非对称加密。Private Key和Public Key有互操作性,即用private key加密的可以用public key解密,用public key加密的可以用private key解密。传统的单向认证则只用public key进行加密,有private key的一方才可进行解密。例如,一个web服务器会有一对private key和public key。浏览器客户端保存着服务器的public key。当客户端需要向服务器发送数据时,就用服务器的public key进行加密,然后服务器收到数据时,再用private key进行解密。客户端验证服务器是否为真实的服务器时,会根据服务器提供的public key和自己本地保存的public key作比较,一致的话才能验证服务器的真实性.

在我们的config server中,一些对加密要求比较高的可以采用RSA算法进行数据的加密和解密.

项目源码 。

Gitee码云 。

生成测试Keystore 。

我们需要使用jdk自带的keytool工具生成一个keystore,里边保存了private key的信息,使用如下命令行:

keytool -genkeypair -alias config-server-key -keyalg RSA -dname "CN=Config Server,OU=Xuqian,O=My Own Company,L=Beijing,S=Beijing,C=CN" -keypass changeit 。

-keystore server.jks -storepass changeit 。

-genkeypair 参数即产生一对public key和private key。 -alias 指定key的别名,用于区分同一keystore中不同的key。 -keyalg 指定生成key的算法,这里使用默认的RSA -dname 指定common name,即CN,用以验证key的身份。其中各项皆为自定义参数,OU为单位名称,O为组织名称,L为城市,S为省份/州,C为国家 -keypass 为key的密码 -keystore 为keystore的文件名 -storepass 访问keystore的密码 。

上述工具将产生的 privte key 保存在了名为server.jks的 key store 中。到目前为止,我们只产生了 private key,Spring Cloud Config Server 会根据我们提供的 key 的信息,每次会用程序生成一个 public key,参考如下源代码 。

org.springframework.security.rsa.crypto.KeyStoreKeyFactory:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public KeyPair getKeyPair(String alias, char [] password) {
   try {
     synchronized (lock) {
       if (store == null ) {
         synchronized (lock) {
           // 根据配置提供的 keystore 文件地址和密码获取 keystore 的实例对象
           store = KeyStore.getInstance( "jks" );
           store.load(resource.getInputStream(), this .password);
         }
       }
     }
     // 根据配置提供的 alias 和 password 从 keystore 中取得 private key
     RSAPrivateCrtKey key = (RSAPrivateCrtKey) store.getKey(alias, password);
     // 定义 Public Key 生成规则
     RSAPublicKeySpec spec = new RSAPublicKeySpec(key.getModulus(),
         key.getPublicExponent());
     // 生成 Public Key
     PublicKey publicKey = KeyFactory.getInstance( "RSA" ).generatePublic(spec);
     return new KeyPair(publicKey, key);
   }
   catch (Exception e) {
     throw new IllegalStateException( "Cannot load keys from store: " + resource, e);
   }
}

这里使用了 Java Security API 来对key进行操作。参见注释。然后上边的信息通过 configserver 中的 bootstrap.xml 配置文件提供:

?
1
2
3
4
5
6
7
encrypt:
  #key: Thisismysecretkey
  key-store:
   location: file: //${user.home}/development/keys/server.jks
   password: changeit
   alias: config-server-key
   secret: changeit

因为我们不能同时使用对称加密和非对称加密,所以我们把 encrypt.key 配置注释掉,然后指定非对称加密的参数:

  • location: Keystore 的文件路径
  • password: keystore 的密码
  • alias: key 的别名
  • secret: key的密码

测试 。

我们继续使用 encrypt API加密一项测试数据:

?
1
curl http: //localhost:8888/encrypt -d 23456789

返回加密后的字符:

AQAPWOUOh4WVexGgVv+bgtKc5E0d5Aba8VUKnzEXh27HyKSAbW+wyzDwZTbk5QYfXpoCAs413rdeNIdR2ez44nkjT5V+438/VQExySzjZPhP0xYXi9YIaJqA3+Ji+IWK8hrGtJ4dzxIkmItiimCOirLdZzZGDm/yklMUVh7lARSNuMxXGKlpdBPKYWdqHm57ob6Sb0ivm4H4mL1n4d3QUCuE7hh2F4Aw4oln7XueyMkRPTtPy8OpnBEEZhRfmaL/auVZquLU5jjMNJk9JiWOy+DSTscViY/MZ+dypv6F4AfDdVvog89sNmPzcUT+zmB8jXHdjLoKy+63RG326WffY9OPuImW6/kCWZHV6Vws55hHqRy713W6yDBlrQ/gYC3Wils= 。

然后测试解密 。

curl http://localhost:8888/decrypt -d AQAPWOUOh4+bgtKc5E0d5Aba8VUKnzEXh27HyKSAbW+wyzDwZTbk5QYfXpoCAs413rdeNIdR2ez44nkjT5V+438/VQExySzjZPhP0xYXi9YIaJqA3+Ji+IWK8hrGtJ4dzxIkmItiimCOirLdZzZGDm/yklMUVh7lARSNuMxXGKlpdBPKYWdqHm57ob6Sb0ivm4H4mL1n4d3QUCuE7hh2F4Aw4oln7XueyMkRPTtPy8OpnBEEZhRfmaL/auVZquLU5jjMNJk9JiWOy+DSTscViY/MZ+dypv6F4AfDdVvog89sNmPzcUT+zmB8jXHdjLoKy+63RG326WffY9OPuImW6/kCWZHV6Vws55hHqRy713W6yDBlrQ/gYC3Wils= 。

会返回 。

23456789 。

我们还可以修改web-client.yml来验证:

?
1
2
3
4
#test:
  #password: '{cipher}94c1027141add9844ec47f0be13caebb6b38ed1dcf99811b1a5cd2b874c64407'
user:
  password: '{cipher}AQAPWOUOh4WVexGgVv+bgtKc5E0d5Aba8VUKnzEXh27HyKSAbW+wyzDwZTbk5QYfXpoCAs413rdeNIdR2ez44nkjT5V+438/VQExySzjZPhP0xYXi9YIaJqA3+Ji+IWK8hrGtJ4dzxIkmItiimCOirLdZzZGDm/yklMUVh7lARSNuMxXGKlpdBPKYWdqHm57ob6Sb0ivm4H4mL1n4d3QUCuE7hh2F4Aw4oln7XueyMkRPTtPy8OpnBEEZhRfmaL/auVZquLU5jjMNJk9JiWOy+DSTscViY/MZ+dypv6F4AfDdVvog89sNmPzcUT+zmB8jXHdjLoKy+63RG326WffY9OPuImW6/kCWZHV6Vws55hHqRy713W6yDBlrQ/gYC3Wils='

注释掉 test.password,新增一个 user.password 使用加密后的配置值。然后提交的gitee仓库,通过 url 访问此配置文件:

http://localhost:8888/web-client/default 。

得到如下结果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
   "name" : "web-client" ,
   "profiles" : [
     "default"
   ],
   "label" : null ,
   "version" : "3044a5345fb86d09a043ca7404b9e57c8c13c512" ,
   "state" : null ,
   "propertySources" : [
     {
       "name" : "https://gitee.com/zxuqian/spring-cloud-config-remote/web-client.yml" ,
       "source" : {
         "message" : "此条消息来自于远程配置仓库" ,
         "management.endpoints.web.exposure.include" : "*" ,
         "user.password" : "23456789"
       }
     }
   ]
}

总结 。

以上所述是小编给大家介绍的Spring Cloud Config RSA简介及使用RSA加密配置文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

最后此篇关于Spring Cloud Config RSA简介及使用RSA加密配置文件的方法的文章就讲到这里了,如果你想了解更多关于Spring Cloud Config RSA简介及使用RSA加密配置文件的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com