1.对称加密算法的介绍 对称加密是最快速、最简洁的一种加密方式,加密与解密用的是同样的秘钥。
2.加密环境的3种解决方案 1.设置秘钥key 在配置文件中添加: encrypt.key=me 2.配置jce 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html 下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。 JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下 JRE:将两个jar文件放到%JRE_HOME%\lib\security下 3.springcloud的bug我使用的springcloud版本是Dalston.SR1而这个版本的2不行,所以需要注意。我使用的springboot是1.5x。如果你的是2.0x可以换个springcloud版本试下。
3.加密演示 在码云中创建一个文件: 添加连接数据的内容: post请求: 下面就会生成密码和名称的秘钥,然后我们将名称和密码替换,就这样将你的数据库密码和名称进行加密。 在码云中替换: 注意的是我们要在前面加上:{cipher}。 我们再重新创建一个product的项目,我复制了之前的项目,只需要能连接数据库就行,目的是验证密码进行了加密。 这是我的新项目结构: 配置文件代码:
spring.application.name=e-book-config-productserver.port=8084eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/eureka.instance.perferIpAddress=true#默认false,这里设置true,表示开启读取配置中心的配置spring.cloud.config.discovery.enabled=true#对应eureka中的配置中心serviceId,默认是configserverspring.cloud.config.discovery.serviceId=config-server
启动server和client端: 查看: 如果出现说明进行了加密。 然后查看: 访问成功,说明加密成功。
对称和非对称加密的区别: 1.对称加密算法在加密和解密使用的是同一个秘钥 2.非对称加密算法需要两个秘钥来进行加密和解密,这两个秘钥是公开秘钥和私有秘钥。 从上面的图中我们可以分析出乙总共2个钥匙一个是公钥,一个是私钥。当甲方得到乙的公钥过后利用公钥加密发送给乙方。然后乙得到加密的信息运用自己的私钥再进行解密。这样的好处是:即使有人攻击拦截了密文而且知道了公钥也不能解开密文。只有乙的私钥才能够解开密文。
我们还是利用一个例子来演示,利用分布式配置中心将数据库的名称和密码加密。 服务端项目 服务端的项目基本与我的另外一篇中的服务端项目例子一样,修改的就只有配置文件,所以我这里就只添加配置文件中的代码,大家可以参照这篇博客—>分布式配置中心 配置文件代码如下:
spring.application.name=config-serverserver.port=9030eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/eureka.instance.perferIpAddress=true#spring.cloud.config.server.git.uri=https://gitee.com/agan_jiagou/configspring.cloud.config.server.git.uri=https://gitee.com/Xinyangyunyang/configspring.cloud.config.server.git.username=997355706@qq.comspring.cloud.config.server.git.password=wen1314520++#keytool -genkeypair -alias "config-info" -keyalg "RSA" -keystore "encrypt-info.keystore" # keystore文件的路径encrypt.key-store.location=classpath:/encrypt-info.keystore#encrypt.key-store.location=encrypt-info.keystore# alias 指定密钥对的别名,该别名是公开的;encrypt.key-store.alias=config-info# storepass 密钥仓库encrypt.key-store.password=agan123# keypass 用来保护所生成密钥对中的私钥encrypt.key-store.secret=agan456
大家可以看见我们添加了一个encrypt-info.keystore,这就是公钥和私钥。 接下来就是生成这个文件encrypt-info.keystore。 打开命令行输入模式输入: keytool -genkeypair -alias “config-info” -keyalg “RSA” -keystore “encrypt-info.keystore” 然后自己随便输入,但是密码和私钥必须要和配置文件中的一样。 这样就会产生一个这个文件: 复制到这里: 启动项目测试: 说明服务安装了秘钥。 生产端项目 首先我们在码云上面创建一个配置文件: 然后添加: 基本就是连接数据库的配置。 然后我们复制以前的项目,我这里是修改的里面的product项目大家如果有自己可以连接数据的项目同样可以,这里就是验证数据库加密过后能否成功。 其他没什么修改的就配置文件代码修改了:
spring.application.name=e-book-config-rsa-productserver.port=8084eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/eureka.instance.perferIpAddress=true#默认false,这里设置true,表示开启读取配置中心的配置spring.cloud.config.discovery.enabled=true#对应eureka中的配置中心serviceId,默认是configserverspring.cloud.config.discovery.serviceId=config-server
然后利用post请求对数据的名称和密码进行加密: 得到加密的过后的名称和密码将码云上面的代替掉。 然后启动项目进行测试: 访问成功,说明加密成功并且服务端完成了解密。 同时可以查看:http://localhost:9030/e-book-config-rsa-product/default 看到自己的数据库名称和密码。 如果大家需要demo或者交流的话可以加我的qq997355706。