Skip to content

配置https

1. 准备 SSL 证书

你可以选择自签名证书(适用于测试环境)或者从受信任的证书颁发机构 (CA) 获取证书(适用于生产环境)。这里我们简要介绍如何创建一个自签名证书,因为这在开发和测试环境中非常常见。

创建自签名证书

使用 Java 自带的 keytool 工具来生成一个自签名证书:

bash
keytool -genkeypair -alias myapp -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650
  • -alias myapp:指定密钥库条目的别名。
  • -keyalg RSA:指定使用的算法为 RSA。
  • -keysize 2048:指定密钥大小为 2048 位。
  • -storetype PKCS12:指定密钥库类型为 PKCS12。
  • -keystore keystore.p12:指定密钥库文件名为 keystore.p12
  • -validity 3650:指定证书有效期为 3650 天(约 10 年)。

运行命令时,系统会提示你输入一些信息,如密码、组织名称等。请根据需要填写。

2. 配置 Spring Boot 应用程序

接下来,在 application.propertiesapplication.yml 文件中配置服务器以使用 HTTPS。

application.properties 示例

properties
server.port=8443
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=your_keystore_password
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=myapp

application.yml 示例

yaml
server:
  port: 8443
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: your_keystore_password
    keyStoreType: PKCS12
    keyAlias: myapp
  • server.port:指定 HTTPS 端口,默认是 443,但你可以选择其他端口如 8443。
  • server.ssl.key-store:指定密钥库的位置。classpath: 表示该文件位于类路径下(例如 src/main/resources/ 目录中)。
  • server.ssl.key-store-password:指定密钥库的密码。
  • server.ssl.keyStoreType:指定密钥库类型(通常是 PKCS12)。
  • server.ssl.keyAlias:指定密钥库中的别名。

3. 启用 HTTP 到 HTTPS 的重定向(可选)

如果你希望所有 HTTP 请求都被重定向到 HTTPS,可以在 Spring Boot 应用程序中添加以下配置。

使用 Java 配置

java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .requiresChannel()
            .anyRequest()
            .requiresSecure();
        return http.build();
    }
}

使用属性配置

application.propertiesapplication.yml 中添加:

properties
server.http.port=8080
server.forward-headers-strategy=native
yaml
server:
  http:
    port: 8080
  forward-headers-strategy: native

然后,在你的应用程序中处理 HTTP 和 HTTPS 端口之间的转发。这种方法通常用于更复杂的场景,比如使用反向代理服务器。

4. 启动应用程序

完成上述配置后,你可以像平常一样启动 Spring Boot 应用程序。它现在应该通过 HTTPS 提供服务,并且如果启用了重定向,HTTP 请求将被自动重定向到 HTTPS。

5. 验证 HTTPS 设置

启动应用程序后,可以通过浏览器或其他工具访问 HTTPS URL 来验证设置是否成功。例如:

bash
https://localhost:8443/

如果一切正常,你应该能够看到应用程序的安全页面,并且浏览器地址栏中会显示锁图标表示连接安全。