【Spring Cloud總結】36.配置屬性加解密之非對稱加密

接上篇《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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章