首先需要(Java Cryptography Extension (JCE))的支持,下载路径:
在jdk的安装目录下/jre/lib/security,做文件替换
在config server的配置里加入
encrypt: key: 1112
加密需要key
然后启动项目,在命令行执行curl
curl -X POST http://127.0.0.1:8888/encrypt -d mysecret
要加密的信息放最后,运行出来的结果就是加密后的字符串
7de875ef75b01957a512240c1863106a84b3344aadfa5aec2b2e4cd75478f703
需要解密的话,运行命令:
curl -X POST http://127.0.0.1:8888/decrypt -d 7de875ef75b01957a512240c1863106a84b3344aadfa5aec2b2e4cd75478f703
mysecret 使用加密加密到应用程序中: application.properties
spring.datasource.username: dbuserspring.datasource.password: {cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ
application.yml
spring: datasource: username: dbuser password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'
请注意其中的差别
而客户端正常使用即可。
依赖:
org.springframework.boot spring-boot-starter-security
,可能暴露的问题:
{ "timestamp": 1545212081503, "status": 401, "error": "Unauthorized", "message": "Full authentication is required to access this resource", "path": "/encrypt/status"}
没有权限,
问题原因:
security: basic: enabled: true #默认值是true user: name: user password: 123
解决办法:
enabled=false
以上为对称的加解密,以下讲解非对称加解密:
非对称选择在安全性方面是优越的,但是使用对称密钥往往更方便,因为它只是配置的一个属性值。
要创建一个密钥库进行测试
keytool -genkeypair -alias mytestkey -keyalg RSA \ -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \ -keypass changeme -keystore server.jks -storepass letmein
在windows系统如果执行失败,将命令中的 \ 去掉,此为linux系统中的换行符;
如果对此命令有兴趣,可参考以下
-alias要处理的条目的别名 -keyalg 密钥算法名称 -keysize 密钥位大小 -sigalg 签名算法名称 -destalias 目标别名 -dname 唯一判别名 -startdate 证书有效期开始日期/时间 -ext X.509 扩展 -validity 有效天数 -keypass 密钥口令 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
运行后会生成server.jks
文件,
将server.jks
文件放在类路径(例如)中,然后在您的application.yml
中配置服务器:
encrypt: keyStore: location: classpath:/server.jks password: letmein alias: mytestkey secret: changeme
启动项目,运行命令
curl -X POST http://127.0.0.1:8888/encrypt -d 密文
AQArkCDzEKT2rJU9U+7msxdFvNqZeerM0q0zd7RJ9tyejlvzdo0eDIU6PeU693OszLI8TJ0aNPiZPkWeMJMVdO+kL8lo3EdNjQoYNpGd4sayIzhB71+0NwMKX9xqDzkZ8wz4UW8Q5qXDw1Dsj5VlmOjLD5kh+z21JNGT+EeK2ScWY2KCiy/vtUXm2ajOF5vpBWXINgvnb4+BToy8xyNbDqAORi1YehPXBdw1gEnH9c0w0uhl2dQU1MUT4+YcuaHCFOsUKJnPvxh/6cZFlvsAw1o5cT3f/fvLj3+i5VGrtx0Nu0Gn+OizrjvZ5dugS1Swjtdo+VQ5T5ONT2JxWeVBGjOW+Sxn71cJvzvDQZVkNTp9UeSVdudL23a2PGTU8fm4m94=
剩下的和上面一样