首先需要(Java Cryptography Extension (JCE))的支持,下載路徑:
https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
在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: dbuser
spring.datasource.password: {cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ
application.yml
spring:
datasource:
username: dbuser
password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'
請注意其中的差別
而客戶端正常使用即可。
依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
,可能暴露的問題:
{ "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 <alias> 要處理的條目的別名 -keyalg <keyalg> 密鑰算法名稱 -keysize <keysize> 密鑰位大小 -sigalg <sigalg> 簽名算法名稱 -destalias <destalias> 目標別名 -dname <dname> 唯一判別名 -startdate <startdate> 證書有效期開始日期/時間 -ext <value> X.509 擴展 -validity <valDays> 有效天數 -keypass <arg> 密鑰口令 -keystore <keystore> 密鑰庫名稱 -storepass <arg> 密鑰庫口令 -storetype <storetype> 密鑰庫類型 -providername <providername> 提供方名稱 -providerclass <providerclass> 提供方類名 -providerarg <arg> 提供方參數 -providerpath <pathlist> 提供方類路徑 -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=
剩下的和上面一樣