springboot項目配置ssl連接的實現(xiàn)示例
說明
- 本文經(jīng)過本人實踐,具有實際可操作性。
- 本文重點說明如何快速完成初創(chuàng)springboot項目的ssl配置方式,如果需要深入學習ssl內容,請移步
申請jks文件
在終端中切換到jdk/bin目錄下,然后輸入生成文件的命令
cd C:\Program Files\Java\jdk-21\bin keytool -genkeypair -alias AiDoctor -keyalg RSA -keysize 4096 -storetype JKS -keystore keystore.jks -validity 365
參數(shù)說明:
alias AiDoctor : 密鑰別名
keyalg RSA: 使用RSA算法
keysize 4096: 密鑰長度2048位
storetype JKS: 存儲類型為JKS
keystore keystore.jks: 生成的密鑰庫文件名
validity 365: 有效期365天(1年)
按照提示輸入相關信息:密鑰庫密碼、名字與姓氏(通常輸入域名)、組織單位名稱、組織名稱、城市或地區(qū)名稱、州或省份名稱、國家代碼(如CN)、確認信息是否正確、密鑰密碼(可以直接回車使用與密鑰庫相同的密碼)
完整的代碼和執(zhí)行過程
C:\Users\kongyue>cd C:\Program Files\Java\jdk-21\bin
C:\Program Files\Java\jdk-21\bin>keytool -genkeypair -alias AiDoctor -keyalg RSA -keysize 4096 -storetype JKS -keystore keystore.jks -validity 365
輸入密鑰庫口令:
再次輸入新口令:
輸入唯一判別名。提供單個點 (.) 以將子組件留空,或按 ENTER 以使用大括號中的默認值。
您的名字與姓氏是什么?
[Unknown]: yang
您的組織單位名稱是什么?
[Unknown]: henu
您的組織名稱是什么?
[Unknown]: henu
您所在的城市或區(qū)域名稱是什么?
[Unknown]: kaifeng
您所在的省/市/自治區(qū)名稱是什么?
[Unknown]: henu
該單位的雙字母國家/地區(qū)代碼是什么?
[Unknown]: Zh_CN
CN=yang, OU=henu, O=henu, L=kaifeng, ST=henu, C=Zh_CN是否正確?
[否]: y
正在為以下對象生成 4,096 位RSA密鑰對和自簽名證書 (SHA384withRSA) (有效期為 365 天):
CN=yang, OU=henu, O=henu, L=kaifeng, ST=henu, C=Zh_CN
輸入 <AiDoctor> 的密鑰口令
(如果和密鑰庫口令相同, 按回車):
Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12" 遷移到行業(yè)標準格式 PKCS12。

JKS轉PKCS12
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12
C:\Program Files\Java\jdk-21\bin>keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12 輸入源密鑰庫口令: 已成功導入別名 aidoctor 的條目。 已完成導入命令: 1 個條目成功導入, 0 個條目失敗或取消 Warning: 已將 "keystore.jks" 遷移到 PKCS12。將 JKS 密鑰庫作為 "keystore.jks.old" 進行了備份。
導出證書(用于客戶端信任)
如果需要讓客戶端信任此證書,可以導出公鑰證書:
keytool -exportcert -alias mydomain -keystore keystore.jks -file mydomain.crt -rfc
C:\Program Files\Java\jdk-21\bin>keytool -exportcert -alias AiDoctor -keystore keystore.jks -file AiDoctor.crt -rfc 輸入密鑰庫口令: 存儲在文件 <AiDoctor.crt> 中的證書

spring 配置ssl證書
將生成的keystore.jks文件復制到Spring Boot項目的src/main/resources目錄下

配置Spring Boot的application.yml
server:
ssl:
enabled: true
key-store: classpath:keystore.jks
key-store-password: yourpassword # 替換為你的密鑰庫密碼
key-password: yourpassword # 替換為你的密鑰密碼(如果不同)
key-alias: yourdomain
port: 8443
測試接口
@RestController
@RequestMapping("/test")
public class TestController {
@RequestMapping("/hello")
public String HController() {
return "Hello Controller";
}
}
測試HTTPS連接:啟動Spring Boot應用,訪問https://localhost:8443
由于是自簽名證書,瀏覽器會顯示安全警告,可以添加例外繼續(xù)訪問。

補充:JKS轉PKCS12兩種方式的區(qū)別
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12 keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx -deststoretype PKCS12
第一條命令(原地轉換)
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12
- 作用:將現(xiàn)有的
keystore.jks文件原地轉換為 PKCS12 格式 - 結果:
- 文件擴展名保持
.jks不變 - 但實際內容已經(jīng)是 PKCS12 格式
- 原始 JKS 格式被備份成jks.old
- 文件擴展名保持
- 使用場景:當你希望保留原文件名但改用 PKCS12 格式時
第二條命令(新建文件)
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx -deststoretype PKCS12
- 作用:創(chuàng)建一個新的
keystore.pfx文件(PKCS12 格式) - 結果:
- 生成新文件
keystore.pfx - 原
keystore.jks文件保持不變 - 文件擴展名使用
.pfx(PKCS12 的常用擴展名)
- 生成新文件
- 使用場景:當你需要同時保留 JKS 和 PKCS12 兩個版本時
兩種格式的使用
兩種方式生成的文件都可以在 Spring Boot 中使用,但配置方式稍有不同:
- 對于原地轉換的
.jks文件(實際是 PKCS12 格式)
server:
ssl:
key-store: classpath:keystore.jks
key-store-type: PKCS12 # 必須明確指定
key-store-password: yourpassword
- 對于新建的
.pfx文件
server:
ssl:
key-store: classpath:keystore.pfx
key-store-type: PKCS12 # 可以省略,因為.pfx擴展名默認關聯(lián)PKCS12
key-store-password: yourpassword
實踐建議
推薦使用第二條命令(生成
.pfx文件):- 保留原始 JKS 文件作為備份
.pfx擴展名更明確地表示文件格式- 是行業(yè)更通用的標準
如果你選擇原地轉換:
- 確保備份原始 JKS 文件
- 在配置中必須明確指定
key-store-type: PKCS12 - 注意文件擴展名與實際格式不符可能造成混淆
驗證文件格式:
keytool -list -v -keystore keystore.jks # 或 keytool -list -v -keystore keystore.pfx -storetype PKCS12
到此這篇關于springboot項目配置ssl連接的實現(xiàn)示例的文章就介紹到這了,更多相關springboot配置ssl連接內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java中instanceof和getClass()的區(qū)別分析
本篇文章介紹了,在java中instanceof和getClass()的區(qū)別分析。需要的朋友參考下2013-04-04
實例講解Java的MyBatis框架對MySQL中數(shù)據(jù)的關聯(lián)查詢
這里我們來以實例講解Java的MyBatis框架對MySQL中數(shù)據(jù)的關聯(lián)查詢,包括一對多、多對一的關聯(lián)查詢以及自身關聯(lián)映射的方法等,需要的朋友可以參考下2016-06-06
ArrayList詳解和使用示例_動力節(jié)點Java學院整理
ArrayList 是一個數(shù)組隊列,相當于 動態(tài)數(shù)組。與Java中的數(shù)組相比,它的容量能動態(tài)增長。接下來通過本文給大家介紹arraylist詳解和使用示例代碼,需要的的朋友一起學習吧2017-05-05
詳解SpringBoot中@SessionAttributes的使用
這篇文章主要通過示例為大家詳細介紹了SpringBoot中@SessionAttributes的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-07-07

