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

诗林  金牌会员 | 2025-3-19 15:40:31 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 676|帖子 676|积分 2028

LINUX

1. 生成 SSL 证书

利用工具(如 `keytool` 或 `openssl`)生成 SSL 证书。以下以 `keytool` 为例:
  1. 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 配置:
  1. # 启用 HTTPS
  2. server.port=8443
  3. server.ssl.key-store-type=PKCS12
  4. server.ssl.key-store=classpath:keystore.p12
  5. server.ssl.key-store-password=your_password
  6. server.ssl.key-alias=mydomain
复制代码
3. HTTP 自动重定向到 HTTPS(可选)

强制所有 HTTP 哀求跳转到 HTTPS:
  1. import org.apache.catalina.Context;
  2. import org.apache.catalina.connector.Connector;
  3. import org.apache.tomcat.util.descriptor.web.SecurityCollection;
  4. import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
  5. import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
  6. import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. @Configuration
  10. public class HttpsConfig {
  11.     
  12.     @Bean
  13.     public ServletWebServerFactory servletContainer() {
  14.         TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
  15.             @Override
  16.             protected void postProcessContext(Context context) {
  17.                 SecurityConstraint securityConstraint = new SecurityConstraint();
  18.                 securityConstraint.setUserConstraint("CONFIDENTIAL");
  19.                 SecurityCollection collection = new SecurityCollection();
  20.                 collection.addPattern("/*");
  21.                 securityConstraint.addCollection(collection);
  22.                 context.addConstraint(securityConstraint);
  23.             }
  24.         };
  25.         tomcat.addAdditionalTomcatConnectors(redirectConnector());
  26.         return tomcat;
  27.     }
  28.     private Connector redirectConnector() {
  29.         Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
  30.         connector.setScheme("http");
  31.         connector.setPort(8080); // HTTP 端口
  32.         connector.setSecure(false);
  33.         connector.setRedirectPort(8443); // 重定向到 HTTPS 端口
  34.         return connector;
  35.     }
  36. }
复制代码
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` 路径和暗码):
  1.    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. 生成私钥和证书
   打开下令提示符,运行以下下令:
  1.    openssl req -x509 -newkey rsa:2048 -nodes ^
  2.      -keyout private.key ^
  3.      -out certificate.crt ^
  4.      -days 3650
复制代码
   - 根据提示填写证书信息(国家、构造、域名等)。
3. 生成 PFX 文件(可选)
   将私钥和证书合并为 PFX 格式(Spring Boot 可直接利用):
  1.    openssl pkcs12 -export ^
  2.      -in certificate.crt ^
  3.      -inkey private.key ^
  4.      -out keystore.pfx
复制代码
   - 输入导出暗码(需与 Spring Boot 配置中的 `server.ssl.key-store-password` 一致)。
Spring Boot 配置

将生成的证书(`keystore.p12` 或 `keystore.pfx`)放入项目标 `src/main/resources` 目录,并在 `application.properties` 中配置:
  1. server.port=8443
  2. server.ssl.key-store-type=PKCS12
  3. server.ssl.key-store=classpath:keystore.p12  # 或 keystore.pfx
  4. server.ssl.key-store-password=your_password
  5. 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:
  1. keytool -importkeystore ^
  2.   -srckeystore keystore.pfx ^
  3.   -srcstoretype PKCS12 ^
  4.   -destkeystore keystore.jks ^
  5.   -deststoretype JKS
复制代码
通过以上步调,即可在 Windows 服务器上生成 SSL 证书并配置 Spring Boot 的 HTTPS 访问。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表