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:
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 配置文件提供:
encrypt: #key: Thisismysecretkey key-store: location: file://${user.home}/development/keys/server.jks password: changeit alias: config-server-key secret: changeit
因为我们不能同时使用对称加密和非对称加密,所以我们把 encrypt.key 配置注释掉,然后指定非对称加密的参数:
测试
我们继续使用 encrypt API加密一项测试数据:
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来验证:
#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
得到如下结果:
{ "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加密配置文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
我正在尝试实现RSA算法。我想加密一个图像。问题是当解密完成时,文件无法读取。我不知道问题到底出在哪里。这是RSA的实现: 这是主要方法: 这是加密方法: 这是解密方法: 阅读和写作的方法如下所述:http://www.java2s.com/Code/Java/File-Input-Output/Readfiletobytearrayandsavebytearraytofile.htm
本文向大家介绍PHP的RSA加密解密方法以及开发接口使用,包括了PHP的RSA加密解密方法以及开发接口使用的使用技巧和注意事项,需要的朋友参考一下 网络安全问题很重要,尤其是保证数据安全,遇到很多在写接口的程序员直接都是明文数据传输,在我看来这是很不专业的。本人提倡经过接口的数据都要进行加密解密之后进行使用。 这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义
问题内容: 我正在使用PyCrypto通过RSA实现文件加密。 我知道这有点不对,首先是因为RSA速度很慢,其次是因为PyCrypto RSA只能加密128个字符,因此您必须以128个字符的块来爆炸文件。 到目前为止的代码是: 所以我的问题是:是否有更好的方法在文件上使用私钥/公钥加密? 我听说过Mcrypt和OpenSSL,但是我不知道它们是否可以加密文件。 问题答案: 公钥加密通常仅用于少量数
代码https://play.golang.org/p/CUEqjsJq5c 错误: 文件大小811字节(用于测试加密自源文件)。我想加密一些更大的文件,1。。500 mb。我可以用RSA来做吗?或者需要使用其他方法吗?
本文向大家介绍Apache简介及安全配置方案,包括了Apache简介及安全配置方案的使用技巧和注意事项,需要的朋友参考一下 0×00 测试环境 centos6.5+apache2.2.15+php5.3.3 0×01 php的运行模式介绍 php的运行模式分四种: 1. CGI通用网关接口 2. fast-cgi常驻型的CGI 3. cli命令行运行 4. web模块模式 一般情况下,apache
本文向大家介绍Spring Cloud Config配置文件使用对称加密的方法,包括了Spring Cloud Config配置文件使用对称加密的方法的使用技巧和注意事项,需要的朋友参考一下 补充 使用Spring Cloud Config加密功能需要下载JCE扩展,用于生成无限长度的密文。链接:http://www.oracle.com/technetwork/java/javase/downl