springboot项目配置ssl连接的实现示例
目录
- 说明
- 申请jks文件
- JKS转PKCS12
- 导出证书(用于客户端信任)
- spring 配置ssl证书
- 补充:JKS转PKCS12两种方式的区别
- 第一条命令(原地转换)
- 第二条命令(新建文件)
- 两种格式的使用
- 实践建议
说明
- 本文经过本人实践,具有实际可操作性。
- 本文重点说明如何快速完成初创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
参数说明:
alias AiDoctor : 密钥别名
keyalg RSA: 使用RSA算法
keysize 4096: 密钥长度2048位
storetype JKS: 存储类型为JKS
keystore keystore.jks: 生成的密钥库文件名
validity 365: 有效期365天(1年)
按照提示输入相关信息:密钥库密码、名字与姓氏(通常输入域名)、组织单位名称、组织名称、城市或地区名称、州或省份名称、国家代码(如CN)、确认信息是否正确、密钥密码(可以直接回车使用与密钥库相同的密码)
完整的代码和执行过程
C:\Users\kongyuphpe>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 您所在的城市或区域名称是什么? [Unknown]: kaifeng 您所在的省/市/自治区名称是什么? [Unknown]: henu 该单位的双字母国家/地区代码是什么? [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" 迁移到行业标准格式 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文件复制到Sprjavascripting 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 HContro编程客栈ller() { return "Hello Controller"; } }
测试HTTPS连接:启动Spring Boot应用,访问https://localhost:8443
由于是自签名证书,浏览器会显示安全警告,可以添加例外继续访问。
补充:JKS转PKCS12两种方式的区别
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
- 作用:将现有的
keystore.jks
文件原地转换为 PKCS12 格式 - 结果:
- 文件扩展名保持
.jks
不变 - 但实际内容已经是 PKCS12 格式
- 原始 JKS 格式被备份成jks.old
- 文件扩展名保持
- 使用场景:当你希望保留原文件名但改用 PKCS12 格式时
第二条命令(新建文件)
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx -deststoretype PKCS12
- 作用:创建一个新的
keystore.pfx
文件(PKCS12 格式) - 结果:
- 生成新文件
kewww.devze.comystore.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扩展名默认关联PKCS12 key-store-password: yourpassword
实践建议
推荐使用第二条命令(生成
.pfx
文件):- 保留原始 JKS 文件作为备份
.pfx
扩展名更明确地表示文件格式- 是行业更通用的标准
如果你选择原地转换:
- 确保备份原始 JKS 文件
- 在配置中必须明确指定
key-store-type: PKCS12
- 注意文件扩展名与实际格式不符可能造成混淆
验证文件格式:
keytool -list -v -keystore keystore.jks # 或 keytool -list -v -keystore keystore.pfx -storetype PKCS12
到此这篇关于springboot项目配置ssl连接的实现示例的文章就介绍到这了,更多相关springboot配置ssl连接内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论