开发者

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。

springboot项目配置ssl连接的实现示例

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> 中的证书

springboot项目配置ssl连接的实现示例

spring 配置ssl证书

将生成的keystore.jks文件复制到Sprjavascripting Boot项目的src/main/resources目录下

springboot项目配置ssl连接的实现示例

配置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

由于是自签名证书,浏览器会显示安全警告,可以添加例外继续访问。

springboot项目配置ssl连接的实现示例

补充: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)! 

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜