美文网首页工作生活
Spring Boot 集成配置 HTTPS

Spring Boot 集成配置 HTTPS

作者: 程序员泥瓦匠 | 来源:发表于2019-07-01 16:11 被阅读0次

    这是泥瓦匠的第108篇原创

    文章工程:

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

    一、HTTPS 是什么

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

    比如打开我的博客地址:

    https://www.bysocket.com
    

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

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

    二、申请 HTTPS

    2.1 申请SSL证书

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

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

    2.2 证书文件介绍

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

    另外两种配置模式:

    • 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 类,代码如下

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

    参考资料

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

    相关文章

      网友评论

        本文标题: Spring Boot 集成配置 HTTPS

        本文链接:https://www.haomeiwen.com/subject/cwtncctx.html