博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一文教你将 SpringBoot 网站升级为 HTTPS
阅读量:6805 次
发布时间:2019-06-26

本文共 3283 字,大约阅读时间需要 10 分钟。

今年 2 月份,谷歌宣布:7 月起,Chrome 浏览器的地址栏将把所有 HTTP 标示为不安全网站!如今已经是 6 月底了,是时候将抛弃容易被第三方监控的 HTTP 拥抱 HTTPS 了。

下面就从 HTTPS 证书申请、网站 HTTPS 的配置、HTTP 重定向到 HTTPS 三个方面教你将一个 SpringBoot 网站升级为安全的 HTTPS。

证书申请

目前国内提供免费 HTTPS 证书的云服务商并不多,一向不大方的腾讯这次倒是很大方,腾讯云提供了免费的亚洲诚信品牌免费型 DV 版 SSL 证书,注册认证过的用户即可免费申请 20 个免费证书。

创建证书

选择证书

首先你需要注册认证腾讯云,然后进入到 SSL证书 管理菜单,点击申请证书按钮,然后在弹框中选择免费版DVSSL证书,点击确定按钮。

完善域名信息

然后填写你的域名信息,通用名称即为你要申请证书的域名,申请邮箱填写个人常用邮箱即可,如下图所示:

完成域名验证

选择DNS验证后,会看到以下信息:

此时进入到域名提供商的后台,添加一条解析即可:

最后回到证书验证界面,点击验证即可认证成功,认证成功后坐等审核通过即可,一般审核时间为几分钟到几小时不等。

审核完成后,就可以在证书列表界面下载证书了,下载的到的文件是一个 ZIP 压缩包,压缩包里面包含了各种常用的网站托管软件所需的证书格式:

网站配置

拷贝密钥

SpringBoot 默认使用 Tomcat 进行网站托管,因此从压缩包中的 Tomcat 目录将证书(文件后缀为jks)拷贝到 SpringBoot 工程的 resources 目录下即可:

更新配置

证书拷贝完整后,打开配置文件 application.yml,然后修改网站的端口为 443key-store-password 可以在证书压缩包的 Tomcat 文件夹下的文本文件中找到,此外配置一下 SSL 证书的类型以及路径等信息即可:

server:  address: 0.0.0.0  port: 443  ssl:    enabled: true    key-store: classpath:luooqi.com.jks    key-store-password: xxxxxxxxxxxx    key-store-type: JKS复制代码

至此便可以启动运行项目,可以在地址栏输入 https://yourdomain 即可访问,在服务器上发布后可以看到如下效果:

将 HTTP 请求重定向到HTTPS

网站虽然升级到了 HTTPS,但是很多老用户并不知情,当他们访问旧版的 HTTP 地址时会发现网站已经无法访问:

因此最佳的做法是将 HTTP 重定向到 HTTPS,下面就教你如何通过代码实现。

添加 HTTP 端口配置

首先在配置文件中添加自定义的 HTTP 端口配置:

http-port: 80复制代码

建立重定向关系

新建一个配置类 HttpsConfiguration,在类中将配置文件中自定义的 HTTP 端口和 HTTPS 的端口都注入进来,然后创建一个新的 Connector 来处理 HTTP 请求,同时设置 Connector 的端口为注入的 HTTP 端口,重定向端口(setRedirectPort)为新的 HTTPS 端口。

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;@Configurationpublic class HttpsConfiguration {    @Value("${http-port}")    private int port;    @Value("${server.port}")    private int sslPort;    @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(redirectConnector());        return tomcat;    }    private Connector redirectConnector() {        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);        connector.setScheme("http");        connector.setPort(port);        connector.setSecure(false);        connector.setRedirectPort(sslPort);        return connector;    }}复制代码

特别注意

上面代码中需要特别注意的是,TomcatServletWebServerFactory 必须要在其 postProcessContext 方法中添加 HTTP 的匹配范围 addPattern("/*"),否则重定向无效。


Any Code,Code Any!

扫码关注『AnyCode』,编程路上,一起前行。

转载地址:http://uknwl.baihongyu.com/

你可能感兴趣的文章
mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations
查看>>
AJAX 传递jison数组 ;前端循环辅助数组 -----解决方案
查看>>
关于磁盘相关知识
查看>>
Mozilla推出HTML/CSS在线交互式学习网站Thimble
查看>>
关于ppp认证
查看>>
彻底禁用SilentDetection.aspx,极速登录
查看>>
为了忘却的纪念,我的天龙游戏生涯
查看>>
12294错误事件的处理--利用审核日志查找病毒来源
查看>>
第25讲: Scala中柯里化实战详解
查看>>
81.LAMP,PHP5和PHP7安装
查看>>
linux服务(一)LAMP编译安装
查看>>
一次RPC调用时间都去哪儿了
查看>>
linux的rsync工具的常用选项及ssh同步介绍
查看>>
oracle内存体系(二)
查看>>
ReflectASM的使用
查看>>
智能家居监控移动手机组态现实生活中的应用
查看>>
笔试题、面试题
查看>>
shell 数组
查看>>
Linux操作系统的安装
查看>>
服务器RAID
查看>>