springboot~configserver里对重要信息进行RSA加密

简介

参考:https://springcloud.cc/spring-cloud-dalston.html#_encryption_and_decryption_2
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做比较,一致的话才能验证服务器的真实性。html

在咱们的config server中,一些对加密要求比较高的能够采用RSA算法进行数据的加密和解密web

生成测试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:
这里使用了 Java Security API 来对key进行操做。参见注释。而后上边的信息经过 configserver 中的 bootstrap.xml 配置文件提供:spring

encrypt:
  #key: Thisismysecretkey
  key-store:
    location: file://${user.home}/development/keys/server.jks
    password: changeit
    alias: config-server-key
    secret: changeit

由于咱们不能同时使用对称加密和非对称加密,因此咱们把 encrypt.key 配置注释掉,而后指定非对称加密的参数:bootstrap

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

测试

咱们继续使用 encrypt API加密一项测试数据浏览器

curl http://localhost:8888/encrypt -d lind123

返回加密后的字符:安全

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=

会返回curl

lind123

应用到项目

添加依赖工具

implementation('org.springframework.security:spring-security-rsa')

bootstrap.yml内容

user:
  password: '{cipher}AQAPWOUOh4WVexGgVv+bgtKc5E0d5Aba8VUKnzEXh27HyKSAbW+wyzDwZTbk5QYfXpoCAs413rdeNIdR2ez44nkjT5V+438/VQExySzjZPhP0xYXi9YIaJqA3+Ji+IWK8hrGtJ4dzxIkmItiimCOirLdZzZGDm/yklMUVh7lARSNuMxXGKlpdBPKYWdqHm57ob6Sb0ivm4H4mL1n4d3QUCuE7hh2F4Aw4oln7XueyMkRPTtPy8OpnBEEZhRfmaL/auVZquLU5jjMNJk9JiWOy+DSTscViY/MZ+dypv6F4AfDdVvog89sNmPzcUT+zmB8jXHdjLoKy+63RG326WffY9OPuImW6/kCWZHV6Vws55hHqRy713W6yDBlrQ/gYC3Wils='

访问:http://localhost:8888/service1/svt

返回内容已经解密了

{

 "user.password": "23456789"

}
相关文章
相关标签/搜索