接上篇《35.配置屬性加解密之對稱加密》 Spring Cloud版本爲Finchley.SR2版
上兩篇我們講解了有關Spring Cloud Config的對稱加密相關的加密和解密操作,本篇來講解一些非對稱加解密操作。
本部分官方文檔:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_creating_a_key_store_for_testing
注:好像Finchley.SR2的文檔已經掛了,最新的是Finchley.SR4的文檔。
回憶一下上一篇我們講到的對稱加密和非對稱加密的區別:。
對稱加密過程和解密過程使用的同一個密鑰,加密過程相當於用原文+密鑰可以傳輸出密文,同時解密過程用密文-密鑰可以推導出原文。但非對稱加密採用了兩個密鑰,一般使用公鑰進行加密,使用私鑰進行解密。
本篇我們主要針對非對稱加密進行講解,Config Server端開啓非對稱加密功能需要以下幾步:
1、下載安裝JCE
2、使用keytool工具生成密鑰文件
3、進行密鑰文件的相關配置
4、進行加密解密操作
一、下載安裝JCE
詳細步驟見上一章。
二、使用keytool工具生成密鑰文件
jdk中自帶的keytool工具生成密鑰文件,keytool是JDK中的一個密鑰和證書管理工具。它使用戶能夠管理自己的公鑰/私鑰對及相關證書,用於(通過數字簽名)自我認證(用戶向別的用戶/服務認證自己)或數據完整性以及認證服務。
keytool工具的常見指令參數見下圖:
有關生成密鑰對的指令:
這裏需要注意的是,genkeypair只生成公私鑰對條目,私鑰不可見,公鑰會以證書格式保存在keystore中。
打開jdk所在的文件夾,找到%JAVA_HOME%\bin\keytool.exe,它就是keytool工具。我們打開cmd控制檯,輸入以下指令,進行密鑰文件的創建:
keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass 123456 -keystore server.jks -storepass 123456
上面的指令,除指定了別名、加密方式以外,還指定了密鑰的一些參數,如所在組織、公司、省市、國家信息,以及密鑰口令和密鑰庫口令,存儲密鑰的名稱。
執行完上述命令後,會在cmd的當前位置生成這個密鑰文件:
三、進行密鑰文件的相關配置
我們將上一步生成的server.jks文件,防止在microserver-config-server工程的src/main/resource文件夾下:
然後新增(這裏我們直接修改原來的)bootstrap.yml配置文件(爲什麼要在bootstrap.yml裏配置,原因在上一篇有講解),進行以下配置:
encrypt:
key-store:
location: classpath:/server.jks
alias: mytestkey
password: 123456
secret: 123456
這裏配置了密鑰的公鑰信息,即公鑰在客戶端,私鑰在服務端,客戶端通過公鑰進行加密,服務端通過私鑰進行解密。
四、進行加密解密操作
我們重啓microserver-config-server工程,使用postman訪問加密接口encrypt,將我們的Spring-Cloud-Config-Test倉庫下的application-prod.yml中的“type: prod”內容中的“prod”進行非對稱加密:
將得到的密文配置到Spring-Cloud-Config-Test倉庫下的application-prod.yml中:
type: '{cipher}AQA/WLsTLuWVdsf5+K3L58iMAWKlYXXwsM6UEfLWJkTaifL4Y/zVrSju78tudA39Tb+iXr8TCXL794dW//5YCOU93HIvVc9Au5UjIzs/Z6bLA8Pq2X3i2dmAdk6QEg8ihVr5sHP0ina9S00HCvl9CM7j4/IgpmIZu1M+SNDrgzmimnN/jalvLTEWtZFhScS/sEsiOe3mSpqFQ4TwcLxqtriiP8Yp93IdBCrOMB6jYukYWw0zY3+J8h2KSg4Scim1161/LrrOIT+kT0Sq4HMtRl87vAY3JtFI5sZm7D/61olvGGWCkaDRsacXA5+NVH9qkwzRi83062tn4+QF/IillWFQh0iZILkV1zv8RMPFmxjb+vXR1fqfD84vc5btFDai1lQ='
然後將該內容更新到遠端倉庫:
然後我們重啓服務,訪問 端點,發現通過Config Server可以自動解密倉庫中的密文,直接反饋出明文:
至此,配置屬性的非對稱加密操作已經講解完畢。
整個過程的原理就是,使用JCE模塊的加密功能,結合生成的公鑰,對明文進行加密操作。然後讀取需要解密的密文(帶{cipher}標籤)後,在JCE模塊中,從密鑰庫中取出公鑰對應的私鑰,進行明文的解密操作,進而得到明文。
想自己編寫一個java非對稱加解密的童鞋,可以看一下這篇文章:《Java結合keytool實現非對稱加密和解密》
參考:《51CTO學院Spring Cloud高級視頻》
https://blog.csdn.net/qq_36882843/article/details/81202715
轉載請註明出處:https://blog.csdn.net/acmman/article/details/105456064