Spring boot 項目 配置https添加服務端客戶端證書認證

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文件拷貝導致的,mavenresources下文件拷到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的文件。

         然後調用接口還是報錯:PKIXunable 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");

即可。

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