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

LINUX

1. 生成 SSL 证书

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

bash 复制代码
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 配置:

XML 复制代码
# 启用 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:

java 复制代码
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` 后回车。

  1. 定位到 JDK 的 `bin` 目录

如果已配置 JDK 环境变量,可直接使用 `keytool`。

否则需要进入 JDK 安装目录,例如:

cd C:\Program Files\Java\jdk1.8.0_361\bin

  1. 生成 PKCS12 格式的密钥库

运行以下命令生成证书(替换 `-keystore` 路径和密码):

java 复制代码
   keytool -genkeypair -alias mydomain -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore E:\path\to\keystore.p12 -validity 3650
  • 根据提示输入密码、姓名(域名)、组织等信息。

  • `-keystore`:生成的证书文件路径(建议放在项目资源目录,如 `src/main/resources`)。

  1. 验证生成结果

检查文件 `keystore.p12` 是否生成成功。

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

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

步骤:

  1. 安装 OpenSSL
  • 下载 Windows 版 OpenSSL:

OpenSSL 官方二进制包\](https://slproweb.com/products/Win32OpenSSL.html) 或使用 Chocolatey 安装: choco install openssl 2. 生成私钥和证书 打开命令提示符,运行以下命令: ```java openssl req -x509 -newkey rsa:2048 -nodes ^ -keyout private.key ^ -out certificate.crt ^ -days 3650 ``` - 根据提示填写证书信息(国家、组织、域名等)。 3. 生成 PFX 文件(可选) 将私钥和证书合并为 PFX 格式(Spring Boot 可直接使用): ```java 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\` 中配置: ```XML 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: ```XML keytool -importkeystore ^ -srckeystore keystore.pfx ^ -srcstoretype PKCS12 ^ -destkeystore keystore.jks ^ -deststoretype JKS ``` 通过以上步骤,即可在 Windows 服务器上生成 SSL 证书并配置 Spring Boot 的 HTTPS 访问。

相关推荐
奋斗的小乌龟6 小时前
langchain4j笔记-08
java·spring boot·笔记
小英雄大肚腩丶7 小时前
RabbitMQ消息队列
java·数据结构·spring boot·分布式·rabbitmq·java-rabbitmq
刃神太酷啦7 小时前
《网络基础全链路深度解析:从Socket编程到HTTPS与TCP/UDP内核机制》----《Hello Linux!》(25)
linux·运维·c语言·网络·c++·tcp/ip·https
lunzi_08268 小时前
《图解HTTP》--第3章 HTTP报文内的HTTP信息
网络·网络协议·http
一 乐8 小时前
学院教学工作量统计|基于java+ vue学院教学工作量统计管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·学院教学工作量统计系统
静小谢9 小时前
sql笔记
spring boot·笔记·sql·mybatis
逍遥德9 小时前
常见的任务调度框架介绍
java·spring boot·中间件
念越10 小时前
HTTPS 安全内核:对称与非对称加密的博弈,数字证书一战定局
java·网络·网络协议·安全·https
彭于晏Yan10 小时前
JSONObject 使用文档(Java/Android原生)
java·spring boot·后端
紫琪软件工作室10 小时前
SpringBoot Java邮件发送工具类
java·spring boot·spring