📜  Spring Boot-启用HTTPS(1)

📅  最后修改于: 2023-12-03 15:35:03.234000             🧑  作者: Mango

Spring Boot - 启用 HTTPS

在 web 安全方面,HTTPS 远比 HTTP 更优秀。它不仅能防止窃听和篡改,还可以防范中间人攻击。在 Spring Boot 中,启用 HTTPS 非常简单,这篇文章将为您演示如何实现。

前提条件

在启用 HTTPS 之前,您必须有 SSL 证书。您可以通过许多机构或自签名来获得 SSL 证书。

步骤
1. 引入 SSL 证书

首先,将 SSL 证书添加到您的 Spring Boot 项目中。将您的 keystore 放入项目的文件夹中。在 application.properties 中,配置 SSL 相关属性。

server.port=8443
server.ssl.key-store-type=JKS
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=changeit
server.ssl.key-alias=tomcat
2. 创建 HTTPS Connector

在启动你的应用程序时,创建 SSL 连接器,代码如下:

@Configuration
public class SSLConfiguration {

    @Value("${server.port}")
    private int port;

    @Value("${ssl.keystore}")
    private Resource keystore;

    @Value("${ssl.key-store-password}")
    private String password;

    @Value("${ssl.key-store-type}")
    private String type;

    @Bean
    public TomcatServletWebServerFactory 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(redirectConnector());
        return tomcat;
    }

    private Connector redirectConnector() {
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("http");
        connector.setPort(8080);
        connector.setSecure(false);
        connector.setRedirectPort(port);
        return connector;
    }

    @Bean
    public EmbeddedServletContainerFactory servletContainerFactory() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.addAdditionalTomcatConnectors(sslConnector());
        return tomcat;
    }

    private Connector sslConnector() {
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("https");
        connector.setSecure(true);
        connector.setPort(port);
        connector.setProperty("SSLEnabled", "true");
        connector.setProperty("keystoreFile", keystore.getFile().getAbsolutePath());
        connector.setProperty("keystorePass", password);
        connector.setProperty("keystoreType", type);
        return connector;
    }
}
3. 启动服务

将应用程序以 HTTPS 协议启动,以便在浏览器中访问安全站点。

默认情况下,Spring Boot 端口为 8080,您应该将它更改为 8443。

server.port=8443
结论

启用 HTTPS 比较简单,但它可以大大提高安全性,这对于Web 应用程序至关重要。现在你知道如何在 Spring Boot 中启用 HTTPS。