SpringBoot配置HTTPS的详细步骤

 更新时间:2026年03月25日 08:57:59   作者:希望永不加班  
本文介绍了配置SpringBoot项目HTTPS的全流程,包括开发环境生成自签名证书和生产环境配置正式SSL证书,以及配置HTTP自动跳转HTTPS以提升用户体验,注意事项和常见问题也一并进行了说明,需要的朋友可以参考下

做项目时,只要涉及“用户登录、支付、敏感数据传输”,就必须用 HTTPS——否则数据在网络上明文传输,很容易被劫持、篡改。

HTTPS 是不是只能买证书?自签名证书能不能用?SpringBoot 里怎么配?

今天就把 SpringBoot 配置 HTTPS 的全流程讲透:

  • 开发环境:生成自签名证书(免费,不用花钱);
  • 生产环境:配置正式 SSL 证书(阿里云/腾讯云免费申请);
  • 额外技巧:配置 HTTP 自动跳转 HTTPS(用户输 http 也能自动到 https)。

纯实操,跟着做就能搞定,再也不用怕“HTTPS 配置报错”。

先搞懂核心:HTTPS 证书的两种类型

证书类型自签名证书(开发/测试用)正式 SSL 证书(生产用)
核心特点自己生成,免费,浏览器会提示“不安全”权威机构签发,免费/付费,浏览器信任
适用场景本地开发、测试环境生产环境、对外提供服务的项目
获取方式用 JDK 的 keytool 命令生成阿里云/腾讯云/Let's Encrypt 申请
浏览器表现标红、提示“证书不受信任”显示绿色小锁,提示“安全”

一句话总结:开发用自签名(省钱、方便),生产用正式证书(安全、用户体验好)。

开发环境——生成自签名证书

JDK 自带 keytool 工具,不用装额外软件,一行命令就能生成证书。

第一步:生成自签名证书

打开命令行(Windows 用 cmd,Linux/Mac 用终端),执行以下命令:

# 生成 JKS 格式证书(SpringBoot 推荐格式)
keytool -genkeypair-alias springboot-https -keyalg RSA -keysize2048-storetype JKS -keystore springboot-https.jks -validity3650

命令参数解释(不用记,直接复制用):

-alias:证书别名(随便起,比如 springboot-https);

-keyalg:加密算法(RSA,通用);

-keysize:密钥长度(2048,足够安全);

-storetype:证书格式(JKS,SpringBoot 支持);

-keystore:证书文件名(springboot-https.jks);

-validity:有效期(3650 天,约10年)。

执行命令后,会提示输入信息,按提示填(开发环境随便填,不用真实信息):

输入密钥库口令: 123456 (设置证书密码,记下来,后面要用到)
再次输入新口令: 123456
您的名字与姓氏是什么?  [Unknown]:  localhost
您的组织单位名称是什么?  [Unknown]:  dev
您的组织名称是什么?  [Unknown]:  test
您所在的城市或区域名称是什么?  [Unknown]:  beijing
您所在的省/市/自治区名称是什么?  [Unknown]:  beijing
该单位的双字母国家/地区代码是什么?  [Unknown]:  CN
CN=localhost, OU=dev, O=test, L=beijing, ST=beijing, C=CN 是否正确?  [否]:  y
输入的密钥口令: (直接回车,和密钥库口令一致)

执行完成后,当前目录会生成 springboot-https.jks 文件(这就是自签名证书)。

第二步:把证书放到项目里

把生成的 springboot-https.jks 复制到 SpringBoot 项目的 src/main/resources 目录下(方便读取)。

第三步:配置 application.yml 启用 HTTPS

server:
port:443# HTTPS 默认端口是 443(不用8080了)
ssl:
# 证书路径(resources 下的 jks 文件)
key-store: classpath:springboot-https.jks
# 证书格式(JKS)
key-store-type: JKS
# 证书别名(和生成时的 -alias 一致)
key-alias: springboot-https
# 证书密码(生成时设置的 123456)
key-store-password:123456

第四步:启动项目,测试 HTTPS

  1. 启动 SpringBoot 项目,日志里没有报错,说明配置成功;
  2. 打开浏览器,访问 https://localhost(不用加端口,443 是默认端口);
  3. 浏览器会提示“您的连接不是私密连接”(自签名证书的正常现象),点击“高级”→“继续访问localhost(不安全)”;
  4. 能正常访问接口,说明 HTTPS 配置成功。

开发环境小技巧:如果想去掉浏览器的“不安全”提示,可以把自签名证书导入浏览器(具体步骤因浏览器而异,开发环境可忽略,不影响功能)。

生产环境——配置正式 SSL 证书

生产环境不能用自签名证书(用户看到“不安全”会不敢访问),需要用权威机构签发的正式证书。

第一步:申请正式 SSL 证书(以阿里云为例,免费)

  1. 登录阿里云官网 → 搜索“SSL 证书” → 进入证书管理控制台;
  2. 点击“购买证书” → 选择“免费版 DV SSL”(个人/小企业够用) → 提交订单(免费);
  3. 填写域名(比如 www.xxx.com) → 验证域名(阿里云会自动验证,不用手动操作);
  4. 验证通过后,下载证书(选择“Tomcat”格式,下载后是 zip 包)。

第二步:处理正式证书(转换成 JKS 格式)

阿里云下载的证书包含 xxx.pem 和 xxx.key 文件,需要转换成 SpringBoot 支持的 JKS 格式:

  1. 解压下载的 zip 包,得到两个文件:www.xxx.com.pem(公钥)、www.xxx.com.key(私钥);
  2. 用 OpenSSL 工具转换成 PKCS12 格式(先装 OpenSSL,Windows 可下载 OpenSSL 安装包):```bash openssl pkcs12 -export -in www.xxx.com.pem -inkey www.xxx.com.key -out www.xxx.com.p12 -name springboot-https ```
  3. 用 keytool 把 PKCS12 转换成 JKS 格式:```bash keytool -importkeystore -srckeystore www.xxx.com.p12 -srcstoretype PKCS12 -destkeystore www.xxx.com.jks -deststoretype JKS ```
  4. 输入密码(设置一个新密码,记下来),完成转换,得到 www.xxx.com.jks 文件。

第三步:配置生产环境 HTTPS

  1. 把 www.xxx.com.jks 复制到项目 src/main/resources 目录;
  2. 修改 application.yml(生产环境配置):```yaml server:   port: 443  # 生产环境 HTTPS 默认端口   ssl:     key-store: classpath:www.xxx.com.jks  # 正式证书文件名     key-store-type: JKS     key-alias: springboot-https  # 和转换时的 -name 一致     key-store-password: 你的证书密码  # 转换时设置的密码     # 可选:开启 HTTP2(提升性能)     http2:       enabled: true ```
  3. 打包部署项目,访问 https://www.xxx.com,浏览器会显示绿色小锁,提示“安全”。

高级技巧——HTTP 自动跳转 HTTPS

用户可能会输入 http://www.xxx.com(HTTP),需要自动跳转到 https://www.xxx.com(HTTPS),配置如下:

第一步:配置 HTTP 端口(比如 80)

server:
port:443# HTTPS 端口
ssl:
# 省略 HTTPS 证书配置...
# 配置 HTTP 端口(80)
http:
port:80

第二步:添加跳转配置类

importorg.apache.catalina.Context;
importorg.apache.catalina.connector.Connector;
importorg.apache.tomcat.util.descriptor.web.SecurityCollection;
importorg.apache.tomcat.util.descriptor.web.SecurityConstraint;
importorg.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
importorg.springframework.boot.web.servlet.server.ServletWebServerFactory;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
@Configuration
publicclassHttpsConfig{
// 配置 HTTP 端口(80)
@Value("${server.http.port:80}")
privateint httpPort;
// 配置 HTTPS 端口(443)
@Value("${server.port:443}")
privateint httpsPort;
// 核心:创建 HTTP 连接器,自动跳转 HTTPS
@Bean
publicServletWebServerFactoryservletWebServerFactory(){
TomcatServletWebServerFactory tomcat =newTomcatServletWebServerFactory(){
@Override
protectedvoidpostProcessContext(Context context){
SecurityConstraint securityConstraint =newSecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");// 强制使用 HTTPS
SecurityCollection collection =newSecurityCollection();
                collection.addPattern("/*");// 所有路径都跳转
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
}
};
// 添加 HTTP 连接器
tomcat.addAdditionalTomcatConnectors(createHttpConnector());
return tomcat;
}
// 创建 HTTP 连接器
privateConnectorcreateHttpConnector(){
Connector connector =newConnector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("http");
        connector.setPort(httpPort);// HTTP 端口
        connector.setSecure(false);
        connector.setRedirectPort(httpsPort);// 跳转到 HTTPS 端口
return connector;
}
}

配置完成后,访问 http://www.xxx.com 会自动跳转到 https://www.xxx.com,用户体验更好。

必避的 4 个坑

证书密码错误
启动报错 java.io.IOException: Keystore was tampered with, or password was incorrect
解决:核对 key-store-password 是否和生成/转换证书时的密码一致。

证书别名错误
启动报错 Alias name springboot-https does not exist
解决:key-alias 必须和生成证书时的 -alias 一致。

端口被占用
443/80 端口被其他程序占用(比如 IIS、Nginx),启动报错 Address already in use
解决:要么杀掉占用端口的进程,要么临时改端口(比如 HTTPS 用 8443,HTTP 用 8080)。

正式证书域名不匹配
访问 https://xxx.com 提示“证书域名不匹配”;
解决:申请证书时的域名必须和访问的域名一致(比如申请 www.xxx.com,就不能用 xxx.com 访问)。

生产环境额外建议

证书过期提醒:正式证书有有效期(免费版一般1年),记得提前续期;

Nginx 反向代理 HTTPS:生产环境建议用 Nginx 配置 HTTPS(性能更好),SpringBoot 只处理业务逻辑;

禁用 HTTP 端口:如果不需要跳转,直接禁用 80 端口,只开放 443;

配置 SSL 协议:只启用 TLS 1.2/1.3(禁用老的 SSLv3/TLS 1.0),提升安全性:```yaml server:   ssl:     enabled-protocols: TLSv1.2,TLSv1.3     ciphers: ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256 ```

最后说两句

HTTPS 配置看似复杂,核心就三步:

  • 开发环境:用 keytool 生成自签名证书,配置 443 端口;
  • 生产环境:申请正式证书,转换成 JKS 格式,配置 HTTPS;
  • 可选:配置 HTTP 自动跳转 HTTPS,提升用户体验。

不管是自签名还是正式证书,配置逻辑都是一样的——只是证书的来源不同。做好 HTTPS 配置,是保障项目数据安全的基础,也是生产环境上线的必备条件。

以上就是SpringBoot配置HTTPS的详细步骤的详细内容,更多关于SpringBoot配置HTTPS的资料请关注脚本之家其它相关文章!

相关文章

  • HTTP基本认证(Basic Authentication)的JAVA实例代码

    HTTP基本认证(Basic Authentication)的JAVA实例代码

    下面小编就为大家带来一篇HTTP基本认证(Basic Authentication)的JAVA实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • spring boot测试打包部署的方法

    spring boot测试打包部署的方法

    spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试、打包到最后的投产上线,感兴趣的朋友一起看看吧
    2018-01-01
  • Apache Arrow Parquet存储与使用

    Apache Arrow Parquet存储与使用

    这篇文章主要为大家介绍了Apache Arrow Parquet存储与使用原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • MyBatis-Plus条件构造器Wrapper应用实例

    MyBatis-Plus条件构造器Wrapper应用实例

    QueryWrapper是用于查询的Wrapper条件构造器,可以通过它来构建SELECT语句中的WHERE条件,这篇文章主要介绍了MyBatis-Plus数据表操作条件构造器Wrapper,需要的朋友可以参考下
    2023-09-09
  • Java的MoreSuppliers工具类方法解析

    Java的MoreSuppliers工具类方法解析

    这篇文章主要介绍了Java的MoreSuppliers工具类方法解析,MoreSuppliers类是一个Java工具类,它提供了一些增强的Supplier函数,使得Supplier执行的结果可以被缓存,真正的调用只执行一次,需要的朋友可以参考下
    2024-01-01
  • SpringBoot集成MyBatis的分页插件PageHelper实例代码

    SpringBoot集成MyBatis的分页插件PageHelper实例代码

    这篇文章主要介绍了SpringBoot集成MyBatis的分页插件PageHelper的相关操作,需要的朋友可以参考下
    2017-08-08
  • 运行Springboot测试类查询数据库数据显示白网页问题及解决方法

    运行Springboot测试类查询数据库数据显示白网页问题及解决方法

    Spring Boot应用未能启动的原因是它没有找到合适的数据库配置具体来说,它需要一个数据源(DataSource),但未能在你的配置中找出,也没有找到任何嵌入式数据库(H2, HSQL 或 Derby),本文给大家分享运行Springboot测试类查询数据库数据显示白网页问题及解决方法,一起看看吧
    2023-11-11
  • Spring整合Quartz Job以及Spring Task的实现方法

    Spring整合Quartz Job以及Spring Task的实现方法

    下面小编就为大家分享一篇Spring整合Quartz Job以及Spring Task的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • springboot整合shardingsphere和seata实现分布式事务的实践

    springboot整合shardingsphere和seata实现分布式事务的实践

    本文主要介绍了springboot整合shardingsphere和seata实现分布式事务的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java正确比较浮点数的方法

    Java正确比较浮点数的方法

    这篇文章主要介绍了Java正确比较浮点数的方法,帮助大家更好的利用Java比较浮点数数据,感兴趣的朋友可以了解下
    2020-11-11

最新评论