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

 更新时间:2025年05月12日 09:21:04   作者:缘友一世  
本文主要介绍了springboot项目配置ssl连接的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

说明

  • 本文经过本人实践,具有实际可操作性。
  • 本文重点说明如何快速完成初创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\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
您所在的城市或区域名称是什么?
  [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文件复制到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

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

在这里插入图片描述

补充: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 格式)
  • 结果
    • 生成新文件 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扩展名默认关联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连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Springboot如何设置静态资源缓存一年

    Springboot如何设置静态资源缓存一年

    这篇文章主要介绍了Springboot如何设置静态资源缓存一年,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • java中instanceof和getClass()的区别分析

    java中instanceof和getClass()的区别分析

    本篇文章介绍了,在java中instanceof和getClass()的区别分析。需要的朋友参考下
    2013-04-04
  • 利用Java编写个"不贪吃蛇"小游戏

    利用Java编写个"不贪吃蛇"小游戏

    贪吃蛇大家一定有玩过了吧,今天小编给大家带来点不一样的。本文将用Java编写一个"不贪吃蛇"小游戏,感兴趣的小伙伴可以动手尝试一下
    2022-08-08
  • Spring之@Qualifier注解的具体使用

    Spring之@Qualifier注解的具体使用

    本文主要介绍了Spring之@Qualifier注解的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 实例讲解Java的MyBatis框架对MySQL中数据的关联查询

    实例讲解Java的MyBatis框架对MySQL中数据的关联查询

    这里我们来以实例讲解Java的MyBatis框架对MySQL中数据的关联查询,包括一对多、多对一的关联查询以及自身关联映射的方法等,需要的朋友可以参考下
    2016-06-06
  • ArrayList详解和使用示例_动力节点Java学院整理

    ArrayList详解和使用示例_动力节点Java学院整理

    ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。接下来通过本文给大家介绍arraylist详解和使用示例代码,需要的的朋友一起学习吧
    2017-05-05
  • Java中Iterator迭代器的简单理解

    Java中Iterator迭代器的简单理解

    这篇文章主要介绍了Java中Iterator迭代器的简单理解,Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Iterator主要用于迭代访问Collection中的元素,因此Iterator对象也被称为迭代器,需要的朋友可以参考下
    2024-01-01
  • java SpringBootWeb请求响应举例详解

    java SpringBootWeb请求响应举例详解

    SpringBoot是一种整合Spring技术栈的方式(或者说是框架),同时也是简化Spring的一种快速开发的脚手架,这篇文章主要给大家介绍了关于java SpringBootWeb请求响应的相关资料,需要的朋友可以参考下
    2024-05-05
  • 详解SpringBoot中@SessionAttributes的使用

    详解SpringBoot中@SessionAttributes的使用

    这篇文章主要通过示例为大家详细介绍了SpringBoot中@SessionAttributes的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-07-07
  • Java算法之串的简单处理

    Java算法之串的简单处理

    今天小编就为大家分享一篇关于Java算法之串的简单处理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论