主题
配置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.properties
或 application.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.properties
或 application.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/
如果一切正常,你应该能够看到应用程序的安全页面,并且浏览器地址栏中会显示锁图标表示连接安全。