Spring Boot 集成配置 HTTPS

这是泥瓦匠的第108篇原创html

文章工程:java

  • JDK 1.8
  • Maven 3.5.2
  • Spring Boot 1.5.9.RELEASE

1、HTTPS 是什么

问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP协议。nginx

好比打开个人博客地址:算法

https://www.bysocket.com

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

file

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

2、申请 HTTPS

2.1 申请SSL证书

打开阿里云证书,能够申请免费一年。一年后继续免费申请一年便可。tomcat

下载,这块选择 Tomcat ,由于此次集成只须要修改 Spring Boot 内嵌容器 Tomcat 配置。若是是 nginx ,也能够对应下载并集成配置安全

2.2 证书文件介绍

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

file

另外两种配置模式:服务器

  • PFX证书安装
  • JKS证书安装

本文使用 PFX证书安装。

3、配置 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 类,代码以下

@Configuration
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 进行操做

参考资料

如下专题教程也许您会有兴趣

相关文章
相关标签/搜索