Spring Boot如何配置实现HTTPS支持?

2026-05-22 06:261阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计559个文字,预计阅读时间需要3分钟。

Spring Boot如何配置实现HTTPS支持?

获取SSL证书有两种方式:

1.自行通过keytool生成;

2.通过证书授权机构购买。

以下以keytool生成为例,实际项目中大部分采用购买方式。

获取SSL证书 有两种方式可以获取到SSL证书: (1)自己通过keytool生成; (2)通过证书授权机构购买; 这里作为演示,采用keytool生成,实际项目中大部分采用的都是购买的方式。 那么怎么使用keytool生成呢? Keytool是java提供的证书生成工具,如果配置了java_home的,直接就可以在控制台进行生成了,这里演示使用的是window的dos窗口:
  • 打开dos窗口;
  • 输入如下命令:

  

Spring Boot如何配置实现HTTPS支持?

 keytool -genkey -alias tomcat -dname "CN=com.wxd,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365 -keystore keystore.p12 这里最好指定一下绝对路径,如果jdk装在c盘的会报错:keytool 错误: java.io.FileNotFoundException: keystore.p12 (拒绝访问。) Spring Boot中启用HTTPS 默认情况下Spring Boot内嵌的Tomcat服务器会在8080端口启动HTTP服务,Spring Boot允许在application.properties中配置HTTP或HTTPS,但是不可同时配置,如果两个都启动,至少有一个要以编程的方式配置,Spring Boot官方文档建议在application.properties中配置HTTPS,因为HTTPS比HTTP更复杂一些 在application.properties中配置HTTPS,配置信息如下:

#https端口号. server.port: 443 #http端口 server.http.port=8080 #证书的路径. server.ssl.key-store: classpath:keystore.p12 #证书密码,请修改为您自己证书的密码. server.ssl.key-store-password: 123456 #秘钥库类型 server.ssl.keyStoreType: PKCS12 #证书别名 server.ssl.keyAlias: tomcat 注意:请将在上一步生成的证书放到src/main/resources目录下 将HTTP请求重定向到HTTPS

package com.neo.https.config; 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.beans.factory.annotation.Value; 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; /** * @author wxd * @version V1.0 * @description SpringSecurityConfiguration * @date 2022/4/22 14:16 **/ @Configuration public class HttpToHttpsContainerFactoryConfig { @Value("${server.http.port}") private int port; @Value("${server.port}") private int httpsPort; @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(httpConnector()); return tomcat; } private Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(port); connector.setSecure(false); connector.setRedirectPort(httpsPort); return connector; } }

本文共计559个文字,预计阅读时间需要3分钟。

Spring Boot如何配置实现HTTPS支持?

获取SSL证书有两种方式:

1.自行通过keytool生成;

2.通过证书授权机构购买。

以下以keytool生成为例,实际项目中大部分采用购买方式。

获取SSL证书 有两种方式可以获取到SSL证书: (1)自己通过keytool生成; (2)通过证书授权机构购买; 这里作为演示,采用keytool生成,实际项目中大部分采用的都是购买的方式。 那么怎么使用keytool生成呢? Keytool是java提供的证书生成工具,如果配置了java_home的,直接就可以在控制台进行生成了,这里演示使用的是window的dos窗口:
  • 打开dos窗口;
  • 输入如下命令:

  

Spring Boot如何配置实现HTTPS支持?

 keytool -genkey -alias tomcat -dname "CN=com.wxd,OU=kfit,O=kfit,L=HaiDian,ST=BeiJing,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365 -keystore keystore.p12 这里最好指定一下绝对路径,如果jdk装在c盘的会报错:keytool 错误: java.io.FileNotFoundException: keystore.p12 (拒绝访问。) Spring Boot中启用HTTPS 默认情况下Spring Boot内嵌的Tomcat服务器会在8080端口启动HTTP服务,Spring Boot允许在application.properties中配置HTTP或HTTPS,但是不可同时配置,如果两个都启动,至少有一个要以编程的方式配置,Spring Boot官方文档建议在application.properties中配置HTTPS,因为HTTPS比HTTP更复杂一些 在application.properties中配置HTTPS,配置信息如下:

#https端口号. server.port: 443 #http端口 server.http.port=8080 #证书的路径. server.ssl.key-store: classpath:keystore.p12 #证书密码,请修改为您自己证书的密码. server.ssl.key-store-password: 123456 #秘钥库类型 server.ssl.keyStoreType: PKCS12 #证书别名 server.ssl.keyAlias: tomcat 注意:请将在上一步生成的证书放到src/main/resources目录下 将HTTP请求重定向到HTTPS

package com.neo.https.config; 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.beans.factory.annotation.Value; 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; /** * @author wxd * @version V1.0 * @description SpringSecurityConfiguration * @date 2022/4/22 14:16 **/ @Configuration public class HttpToHttpsContainerFactoryConfig { @Value("${server.http.port}") private int port; @Value("${server.port}") private int httpsPort; @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(httpConnector()); return tomcat; } private Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(port); connector.setSecure(false); connector.setRedirectPort(httpsPort); return connector; } }