Spring boot 項目 配置https
進入cmd窗口,在jdk的bin目錄下面執行
keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore
按照提示進行操作。
然後在項目的配置文件中加入下面的配置
server.port=443
server.ssl.key-store=classpath:server.keystore
server.ssl.key-alias=tomcat
server.ssl.enabled=true
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS
配置完成後啓動,發現Invalid keystore format錯誤
https://blog.csdn.net/jxctx/article/details/45970199
大都是因爲maven文件拷貝導致的,maven將resources下文件拷到classes下的時候,爲了讓文件的符號能夠更好的兼容多系統,會將文件內某些缺乏兼容性的字符替換爲兼容多系統的字符。然而有時候,類似於jks等二進制文件,對文件進行字符替換後文件格式已變,不符合規定,所以會出現報錯的情況。
解決辦法:在pom文件中加入以下配置
<build>
<resources>
<resource>
<!-- 防止JKS被maven錯誤解析 -->
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
</build>
Spring boot 配置https ssl安全認證,服務端客戶端全套證書
1.給服務端添加證書(將服務端的服務變爲https的訪問方式)
利用jdk自帶的keytoos創建證書:
進入jdk的bin目錄下,執行下面命令
keytool -genkey -v -alias tomcat -keyalg RSA -keystore ./server.keystore -validity 1024
安照提示生成密鑰。
-alias tomcat(別名)
-keyalg RSA(算法)
-validity 365(有效期,天單位)
-keystore ./server.keystore (指定生成證書的位置和證書名稱)
您的名字與姓氏:此處填寫項目的域名,如果是本地就寫localhost或者127.0.0.1,或者某個ip
會生成server.keystore到當前目錄也就是bin目錄下。將證書拷貝到項目的resources根目錄下,在application.properties中加入
相對應的配置改爲自己的配置信息。然後重啓項目,即是https的訪問方式。
2.客戶端會訪問服務端的接口,需要根據https的訪問
當客戶端改爲https的請求後,訪問服務端的接口,報錯Host name '127.0.0.1' does not match the certificate subject provided by the
意爲你訪問的域名和你訪問的服務器的證書的域名不一致,您的名字與姓氏:此處填寫項目的域名,如果是本地就寫localhost或者127.0.0.1,或者某個ip
生成證書時的域名和訪問地址保持一致.
修改之後繼續訪問接口,報錯:unable to find valid certification path to requested target
意爲找不到安全證書。剛纔jdk生成的證書只是服務端的證書,我們需要根據服務端的證書生成客戶端的證書。然後纔會允許客戶端訪問。
keytool -export -alias tomcat -storepass topsec123 -file ./server.cer -keystore server.keystore
根據之前生成的服務端證書生成客戶端證書server.cer
keytool -import -trustcacerts -alias tomcat -storepass topsec123 -file server.cer -keystore sscacerts
會要求你輸入密碼,並不是之前設置的密碼,而是changeit。
然後將生成的證書導入到jdk的密鑰庫中,並且會生成一個sscacerts的文件。
然後調用接口還是報錯:PKIX:unable to find valid certification path to requested target
在代碼中訪問接口前使用
System.setProperty("javax.net.ssl.trustStore", "D:\\Program Files\\Java\\jdk1.8.0_25\\jre\\lib\\security\\servercacerts");
即可。