SpringBoot添加HTTPS支持

证书生成

使用SSL需要我们先生成一个证书,这个证书我们可以自己生成,也可以从SSL证书授权中心获得。

命令生成证书

生成JKS证书

keytool -genkeypair -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore keystore.jks -keypass 123456 -storepass 123456

生成P12证书

keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -storetype PKCS12 -validity 365 -keystore keystore.p12

-alias 别名
-keypass 指定生成密钥的密码
-keyalg 指定密钥使用的加密算法(如 RSA)
-keysize 密钥大小
-validity 过期时间,单位天
-keystore 指定存储密钥的密钥库的生成路径、名称
-storepass 指定访问密钥库的密码

修改配置文件

 将证书文件添加到resources目录,并修改application.properties

server.port=443
server.http-port=80

#开启https,配置跟证书一一对应
server.ssl.enabled=true
#指定证书
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-type=JKS
#server.ssl.key-store=classpath:keystore.p12
#server.ssl.key-store-type= PKCS12
#别名
server.ssl.key-alias=tomcat
#密码
server.ssl.key-password=123456
server.ssl.key-store-password=123456
  • key-store:生成的证书文件的存储路径

  • key-store-password:指定签名的密码,要设置成刚刚你设置的密码

  • keyStoreType:为制定秘钥仓库的类型(PKCS12或者JKS)

  • keyAlias: 别名

如果不知道别名,可以在服务器中输入

keytool -list -keystore keystore.p12

配置http重定向https

在入口类中添加相应的转向Bean

@SpringBootApplication
public class TestDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestDemoApplication.class, args);
    }

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

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(80);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(443);
        return connector;
    }
}

<think>首先,用户的问题是关于SpringBoot配置HTTPS的详细步骤。他们引用了两个来源: - 引用[1]:提到了在yml配置SSL,包括key-store, key-store-password, key-store-type- 引用[2]:展示了在Tomcat连接器配置中设置HTTPS,包括keystoreFile, keystorePass。 用户明确说:“上述引用仅供参考,并不是用户真正的需求”,并强调“请尽可能多的参考用户上一次的问题和你的回答”。但在这个对话中,用户上一次的问题就是这个关于SpringBoot配置HTTPS的问题。之前没有其他对话历史,所以“用户上一次的问题”很可能就是指这个问题本身。 系统指令: - 所有行内数学表达式必须使用$...$格式——但这个问题没有数学内容,所以不需要。 - 独立公式必须使用$$...$$格式——同样,不适用。 - LaTeX语法正确——不涉及数学,所以没问题。 - 使用中文回答——是的,整个回答要用中文。 - 生成相关问题——在回答结束时生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]——既然用户提供了引用,我应该引用它们。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 所以,我需要提供一个结构清晰的、一步步的详细指南来配置SpringBootHTTPS。 关键点基于引用: - 从引用[1]:使用yml配置文件配置SSL属性,如key-store, key-store-password, key-store-type- 从引用[2]:它显示了XML配置,但用户指定了SpringBoot,所以主要关注application.properties或application.yml文件。 SpringBoot配置HTTPS的基本步骤: 1. **获取SSL证书**:用户需要有一个SSL证书文件,通常是一个.jks或.p12文件。用户可以在腾讯云或其他地方申请。 2. **在SpringBoot配置文件中设置属性**:在application.properties或application.yml中添加SSL相关属性。 - 对于yml(如引用[1]所示): ```yaml server: port: 8443 # 通常HTTPS使用8443或443 ssl: key-store: classpath:keystore.p12 # 或完整路径;classpath表示在src/main/resources key-store-password: your_password key-store-type: PKCS12 # 或JKS ``` - 对于properties文件: ``` server.port=8443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=your_password server.ssl.key-store-type=PKCS12 ``` key-store-type通常是PKCS12(.p12文件)或JKS(.jks文件)。 3. **证书文件的放置**:如果使用classpath,将证书文件放在src/main/resources目录下。 4. **启动应用**:运行SpringBoot应用,它会自动启用HTTPS。 用户可能还需要配置HTTP重定向到HTTPS,但这在基本配置中是可选的。 引用[2]是关于Tomcat连接器的XML配置,但在SpringBoot中,通常不需要手动编辑XML,因为SpringBoot自动配置Tomcat基于application.properties/yml。 所以,在回答中,我应该: - 解释步骤。 - 参考提供的引用。 - 确保回答真实可靠:基于SpringBoot官方文档或常见实践。 结构回答: 1. **引言**:简要介绍配置HTTPS的重要性。 2. **步骤**:一步步指南。 a. 准备SSL证书。 b. 配置文件设置(yml或properties)。 c. 放置证书文件。 d. 测试配置。 3. **注意事项**:如密码安全、证书类型等。 4. **生成相关问题**:在结束时添加相关问题。 回答末尾添加引用标识:[^1] 和 [^2]。 相关问题示例: 1. 如何生成SSL证书用于SpringBoot? 2. SpringBoot中如何强制HTTP重定向到HTTPS? 3. 在不同环境中(如开发和生产)如何管理SSL配置? 最后,用中文写。 </think>### SpringBoot 配置 HTTPS 的详细步骤 配置 SpringBoot 支持 HTTPS 是确保 Web 应用安全的重要一环。HTTPS 通过 SSL/TLS 协议加密数据传输,防止敏感信息被窃取。SpringBoot 简化了配置过程,主要通过配置文件(如 `application.yml` 或 `application.properties`)设置 SSL 证书属性。以下是基于您提供的引用和 SpringBoot 官方文档的详细步骤。整个过程分为准备证书、配置文件设置、证书文件放置、测试验证等步骤。我会尽量保证步骤清晰、真实可靠,并引用您的参考信息[^1][^2]。 #### 步骤 1: 准备 SSL 证书 在配置之前,您需要一个有效的 SSL 证书文件。常见的证书格式为 JKS(Java KeyStore)或 PKCS12(.p12 文件)。您可以: - 从腾讯云、阿里云或其他 CA(证书颁发机构)申请免费或付费证书。 - 在申请证书时,会生成一个密钥库文件(如 `.jks` 或 `.p12`)和密码(`key-store-password`)。如果申请时未自定义密码,CA 通常会提供一个 TXT 文件包含默认密码[^1]。 - 示例:使用 OpenSSL 生成自签名证书(仅用于测试): ```bash keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365 ``` 命令执行后,输入密码并保存生成的 `keystore.p12` 文件。 #### 步骤 2: 编辑 SpringBoot 配置文件 SpringBoot 支持 YAML 或 Properties 格式的配置文件(默认位于 `src/main/resources/application.yml` 或 `src/main/resources/application.properties`)。以下是两种格式的配置示例,参考了您的引用[^1]和 SpringBoot 的最佳实践。 - **使用 YAML 格式(推荐,如引用[1]所示)**: 在 `application.yml` 文件中添加以下内容: ```yaml server: port: 8443 # HTTPS 默认端口(常用 8443 或 443)。您可以根据需要修改,如 9990 ssl: key-store: classpath:keystore.p12 # 证书文件路径。classpath: 表示文件在 src/main/resources 目录下 key-store-password: your_password # 证书密码(替换为您的实际密码) key-store-type: PKCS12 # 证书类型,PKCS12 或 JKS(根据您的证书文件类型选择) ``` 说明: - `key-store`: 指定证书文件位置。如果文件不在 classpath 下,可以使用绝对路径(如 `file:/path/to/keystore.p12`)。 - `key-store-password`: 务必保密,不要在代码中硬编码,建议使用环境变量(如 `${KEYSTORE_PASSWORD}`)。 - `key-store-type`: 默认 SpringBoot 支持 PKCS12(.p12 文件)。如果使用 JKS 证书,设置为 `JKS`[^1]。 - **使用 Properties 格式**: 在 `application.properties` 文件中添加: ``` server.port=8443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=your_password server.ssl.key-store-type=PKCS12 ``` 属性含义与 YAML 相同。 注意:引用[2]展示了 Tomcat 连接器的 XML 配置(如 `<Connector protocol="..." port="8443" ...`),但在 SpringBoot 中,通常不需要手动编辑 XML,因为上述配置文件会自动配置内置 Tomcat 服务器。 #### 步骤 3: 放置证书文件 将证书文件(如 `keystore.p12`)添加到项目中: - 如果使用 `classpath:`(推荐),将证书文件复制到 `src/main/resources` 目录下。SpringBoot 启动时会自动加载。 - 如果使用绝对路径(如引用[2]中的 `keystoreFile="D:\software\..."`),确保路径正确,但注意生产环境中这可能不便于移植。 - 证书文件应受保护,避免上传到公共仓库。 #### 步骤 4: 启动应用并测试配置 - 启动 SpringBoot 应用(例如运行 `mvn spring-boot:run` 或启动主类)。 - 访问 `https://localhost:8443`(如果端口设为 8443)。浏览器可能会有安全警告(使用自签名证书时),点击“接受风险”即可。 - 验证 HTTPS 是否生效: - 命令行测试:`curl -vk https://localhost:8443`(`-k` 忽略证书警告)。 - 在日志中检查:启动日志应显示类似 `Tomcat started on port(s): 8443 (https)` 的消息。 #### 注意事项 - **安全提醒**:不要将密码硬编码在配置文件中。使用环境变量(例如在 `application.yml` 中设置 `key-store-password: ${KEYSTORE_PASSWORD}`),并在运行应用时通过 `export KEYSTORE_PASSWORD=your_password`(Linux/Mac)或设置系统属性注入。 - **HTTP 重定向(可选)**:如果需要将 HTTP 请求自动重定向到 HTTPS,可以添加一个配置类: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("redirect:https://localhost:8443"); } } ``` - **生产环境**:使用可信 CA 颁发的证书(非自签名),并考虑使用工具管理证书轮换。 - 参考文档:SpringBoot 官方文档推荐优先使用 `application.yml` 简化配置[^1]。 通过以上步骤,您的 SpringBoot 应用即可支持 HTTPS。如果您遇到问题(如证书无效或端口冲突),请检查证书密码和文件路径是否正确[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值