SpringBoot应用的接口访问从HTTP改为HTTPS

 更新时间:2025年03月20日 09:17:12   作者:day day day ...  
本文主要介绍了SpringBoot应用的接口访问从HTTP改为HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

LINUX

1. 生成 SSL 证书

使用工具(如 `keytool` 或 `openssl`)生成 SSL 证书。以下以 `keytool` 为例:

keytool -genkeypair -alias mydomain -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650

- 输入密码并填写证书信息。
- 生成的 `keystore.p12` 文件需放在项目的 `src/main/resources` 目录下。

2. 配置 Spring Boot 的 HTTPS

在 `application.properties` 或 `application.yml` 中添加 SSL 配置:

# 启用 HTTPS
server.port=8443
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=your_password
server.ssl.key-alias=mydomain

3. HTTP 自动重定向到 HTTPS(可选)

强制所有 HTTP 请求跳转到 HTTPS:

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpsConfig {
    
    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(redirectConnector());
        return tomcat;
    }

    private Connector redirectConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080); // HTTP 端口
        connector.setSecure(false);
        connector.setRedirectPort(8443); // 重定向到 HTTPS 端口
        return connector;
    }
}

4. 测试 HTTPS 访问

启动应用后,访问:
https://localhost:8443/your-api
- 浏览器可能会提示证书不安全(自签名证书),选择继续访问即可。

5. 生产环境注意事项

- 证书来源:生产环境建议使用受信任的证书颁发机构(如 Let's Encrypt)签发的证书。
- 密钥管理:避免将密码硬编码在配置文件中,可使用环境变量或配置中心。
- 防火墙配置:确保服务器的 443 端口(或自定义 HTTPS 端口)已开放。

常见问题排查

- 证书路径错误:检查 `server.ssl.key-store` 路径是否正确。
- 密码错误:确认 `server.ssl.key-store-password` 与生成证书时设置的密码一致。
- 端口冲突:确保 HTTP/HTTPS 端口未被占用。

完成以上步骤后,Spring Boot 接口即可通过 HTTPS 访问。

windows

在 Windows 服务器上生成 SSL 证书,可以通过以下两种常见方法实现:

方法 1:使用 Java 自带的 `keytool`(推荐)

`keytool` 是 JDK 自带的密钥管理工具,无需额外安装,适合生成自签名证书。

 步骤:

1. 打开命令提示符(CMD)
按 `Win + R`,输入 `cmd` 后回车。

2. 定位到 JDK 的 `bin` 目录
如果已配置 JDK 环境变量,可直接使用 `keytool`。  
否则需要进入 JDK 安装目录,例如:
cd C:\Program Files\Java\jdk1.8.0_361\bin

3. 生成 PKCS12 格式的密钥库
运行以下命令生成证书(替换 `-keystore` 路径和密码):

   keytool -genkeypair -alias mydomain -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore E:\path\to\keystore.p12 -validity 3650

- 根据提示输入密码、姓名(域名)、组织等信息。
- `-keystore`:生成的证书文件路径(建议放在项目资源目录,如 `src/main/resources`)。

4. 验证生成结果
检查文件 `keystore.p12` 是否生成成功。

方法 2:使用 OpenSSL(适合生成通用证书)

如果需要生成 PFX 证书(兼容 IIS 或其他服务),可以使用 OpenSSL。

步骤:
1. 安装 OpenSSL
- 下载 Windows 版 OpenSSL:  
[OpenSSL 官方二进制包](https://slproweb.com/products/Win32OpenSSL.html)  

或使用 Chocolatey 安装:
choco install openssl

2. 生成私钥和证书
打开命令提示符,运行以下命令:

   openssl req -x509 -newkey rsa:2048 -nodes ^
     -keyout private.key ^
     -out certificate.crt ^
     -days 3650

- 根据提示填写证书信息(国家、组织、域名等)。

3. 生成 PFX 文件(可选)
将私钥和证书合并为 PFX 格式(Spring Boot 可直接使用):

   openssl pkcs12 -export ^
     -in certificate.crt ^
     -inkey private.key ^
     -out keystore.pfx

- 输入导出密码(需与 Spring Boot 配置中的 `server.ssl.key-store-password` 一致)。

Spring Boot 配置

将生成的证书(`keystore.p12` 或 `keystore.pfx`)放入项目的 `src/main/resources` 目录,并在 `application.properties` 中配置:

server.port=8443
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:keystore.p12  # 或 keystore.pfx
server.ssl.key-store-password=your_password
server.ssl.key-alias=mydomain  # 使用 keytool 时需指定别名

常见问题解决

1. keytool` 命令找不到
- 检查 JDK 是否安装,并确保 `keytool` 所在目录已添加到系统环境变量 `PATH`。

2. 证书密码错误
- 确保 `server.ssl.key-store-password` 与生成证书时设置的密码一致。

3. 端口冲突
- 检查 `server.port` 是否被其他进程占用(如 443 或 8443)。

4. 浏览器提示证书不安全
- 自签名证书会触发警告,生产环境建议替换为受信任的 CA 证书(如 Let's Encrypt)。

附:转换 PFX 到 JKS 格式(可选)

如果需兼容旧版 Java 应用,可将 PFX 转换为 JKS:

keytool -importkeystore ^
  -srckeystore keystore.pfx ^
  -srcstoretype PKCS12 ^
  -destkeystore keystore.jks ^
  -deststoretype JKS

通过以上步骤,即可在 Windows 服务器上生成 SSL 证书并配置 Spring Boot 的 HTTPS 访问。

到此这篇关于SpringBoot应用的接口访问从HTTP改为HTTPS的文章就介绍到这了,更多相关SpringBoot 接口访问HTTP改为HTTPS内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Action+Service +Dao 功能

    浅谈Action+Service +Dao 功能

    下面小编就为大家带来一篇浅谈Action+Service +Dao 功能。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 使用java从乱码文本中解析出正确的文本

    使用java从乱码文本中解析出正确的文本

    这篇文章主要介绍了使用java从乱码文本中解析出正确的文本的方法,需要的朋友可以参考下
    2014-04-04
  • 又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多难用

    又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多难用

    网络数据的基本单位永远是byte,Java NIO提供ByteBuffer作为字节的容器,但该类过于复杂,有点难用.本篇文章就带大家简单了解一下 ,需要的朋友可以参考下
    2021-06-06
  • 浅谈MyBatis3 DynamicSql风格语法使用指南

    浅谈MyBatis3 DynamicSql风格语法使用指南

    这篇文章主要介绍了浅谈MyBatis3 DynamicSql风格语法使用指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 基于Arrays.sort()和lambda表达式

    基于Arrays.sort()和lambda表达式

    这篇文章主要介绍了Arrays.sort()和lambda表达式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Boot与Redis的缓存一致性问题解决

    Spring Boot与Redis的缓存一致性问题解决

    在使用缓存时,缓存一致性问题是一个常见的挑战,本文主要介绍了Spring Boot与Redis的缓存一致性问题,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Spring Boot 2 实战:自定义启动运行逻辑实例详解

    Spring Boot 2 实战:自定义启动运行逻辑实例详解

    这篇文章主要介绍了Spring Boot 2 实战:自定义启动运行逻辑,结合实例形式详细分析了Spring Boot 2自定义启动运行逻辑详细操作技巧与注意事项,需要的朋友可以参考下
    2020-05-05
  • java解析XML几种方式小结

    java解析XML几种方式小结

    本文给大家汇总了4种java解析XML的方法,结合具体的示例,非常的详细,有需要的小伙伴可以参考下
    2016-01-01
  • java实现Flappy Bird游戏源代码

    java实现Flappy Bird游戏源代码

    这篇文章主要为大家详细介绍了java实现Flappy Bird游戏源代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • spring boot微服务自定义starter原理详解

    spring boot微服务自定义starter原理详解

    这篇文章主要介绍了spring boot微服务自定义starter原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论