怎样使用Spring Boot 集成配置 HTTPS

导读 HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
HTTP是一个客户端和服务器端请求和响应的标准TCP协议。

多了个 S,其实 S 表示 TLS、SSL。因此 HTTP 的基础架构如图所示:

怎样使用Spring Boot 集成配置 HTTPS怎样使用Spring Boot 集成配置 HTTPS

HTTP协议(HyperText Transfer Protocol),即超文本传输协议是用于服务器传输到客户端浏览器的传输协议。Web上,服务器和客户端利用HTTP协议进行通信会话。那集成 HTTPS ,简单来说,修改 Tomcat 容器配置,加一层对应的安全约束配置即可。

申请 HTTPS
申请SSL证书

打开阿里云证书,可以申请免费一年。一年后继续免费申请一年即可。

怎样使用Spring Boot 集成配置 HTTPS怎样使用Spring Boot 集成配置 HTTPS

下载,这块选择 Tomcat ,因为这次集成只需要修改 Spring Boot 内嵌容器 Tomcat 配置。如果是 nginx ,也可以对应下载并集成配置

怎样使用Spring Boot 集成配置 HTTPS怎样使用Spring Boot 集成配置 HTTPS

证书文件介绍

在证书控制台下载Tomcat版本证书,下载到本地的是一个压缩文件,解压后里面包含.pfx文件是证书文件,pfx_password.txt是证书文件的密码。

怎样使用Spring Boot 集成配置 HTTPS怎样使用Spring Boot 集成配置 HTTPS

另外两种配置模式:

PFX证书安装

JKS证书安装

本文使用 PFX证书安装。

配置 HTTPS

将 .pfx 文件复制到 resources 根目录,然后配置 application-prod.properties (生产配置文件):

#HTTPS

server.ssl.key-store=classpath:xx.com.pfx
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.port=443

配置项如下:

server.port HTTPS 加密端口
server.ssl.key-store SSL证书路径
server.ssl.key-store-password SSL证书密码
server.ssl.key-store-type 证书类型

然后新增 HttpsConfig 类,代码如下

public class HttpsConfig {
    /**
     * spring boot 1.x
     */
   /* */
    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
            @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);
            }
        };
        return tomcat;
    }
}

运行即可,从日志看出已经支持 HTTPS:

2019-06-16 10:42:42.989  INFO 16727 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 443 (https)
2019-06-16 10:42:45.782  INFO 16727 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 443 (https)

注意点:

这是 1.x 的配置,2.x 版本有所不同

https 默认端口号是 443。本机环境会端口占用可以改成 8080 等

如果一台机器两个 HTTPS 服务,那么可以通过 setRedirectPort 进行操作

原文来自:  https://www.linuxprobe.com/spring-boot-https.html


请使用浏览器的分享功能分享到微信等