Springboot系列-配置Https

Springboot系列-配置Https

前言:关于HTTP和HTTPS相信大家多少都对其有些了解,而且随着对安全方面的着重,HTTPS普及的也越来越广泛,本片博客将针对于Springboot如何配置HTTPS进行介绍


1.HTTP与HTTPS

在介绍关于Springboot配置HTTPS之前,先来简单聊一下关于什么是HTTP和HTTPS,有什么作用,他们之间有什么区别

我们通常使用浏览器去访问一个页面,在浏览器地址栏中我们会看到一串URL,比如: http://www.wxy.com ; 其实这个网站的url分为两部分

  • http/https:这部分我们通常称为通信协议,简单来说就是浏览器与服务器之间沟通的语言
  • www.wxy.com:这部分我们通常称为域名,就是我们访问的一个地址

HTTP

HTTP中文名称:超文本传输协议,它是一种使用明文数据传输的网络协议,所以HTTP协议的明文传输在某些方面存在很大的安全隐患,比如网上买东西,在你输入支付密码的时候由于明文数据传输,所以很容易被截取

HTTPS

HTTPS中文名称:超文本传输安全协议,所谓HTTPS就是是在HTTP协议基础上加入加密处理和认证机制以及完整性保护,即HTTP+加密+认证+完整性保护=HTTPS。但是HTTPS并非应用层的一种新协议,只是HTTP通信接口部分用SSL /TLS协议代替而已。通常HTTP直接和TCP通信,当使用SSL 时则演变成先和SSL 通信,再由SSL 和TCP通信。

简单说HTTPS,其实就是身披SSL 协议这层外壳的HTTP,SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”,采用数据加密传输,是HTTP和HTTPS之间的本质性区别,SSL具体协议基本原理,可自行查阅


2.配置准备

按照正常情况下我们是需要有一个HTTPS证书,因为证书是需要花费或者去云厂商申请,所以为了方便我们直接使用Java自带的JDK管理工具keytool来生成一个免费的的HTTPS证书

进入到 %JAVA_HOME%\bin 目录下,执行如下一条命令:

keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\wxy.p12 -validity 365

对于以上命令是什么意思呢,简单介绍如下:

  • genkey :表示创建一个新的密钥
  • alias :表示 keystore 的别名
  • keyalg :表示使用的加密算法是 RSA ,一种非对称加密算法
  • keysize :表示密钥长度
  • keystore :表示生成的密钥存放位置
  • validity :表示密钥的有效时间,单位为天

如下为博主的获取截图:

在这里插入图片描述

执行完成之后根据你自己设置的相应路径找到相应的文件,如我的为D:/
在这里插入图片描述


3.引入HTTPS

1.配置完成之后我们需要将刚才生成的wxy.p12文件引入到我们的Springboot项目中,将生成文件放置到resource目录下面

2.配置文件application.properties中添加如下配置

server.ssl.key-store=classpath:wxy.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=XXXXXX

  • key-store表示密钥文件名
  • key-alias表示密钥别名
  • key-store-password就是在cmd命令执行过程中输入的密码。

3.我们简单的在controller层里面写个访问资源

@RestController
public class DemoController {
@GetMapping("/start")
public String start(){
    return "hello world";
}

4.配置完成后,启动 Spring Boot 项目,此时直接使用 Http 协议来访问接口,就会看到如下错误
在这里插入图片描述

使用 Https 协议来访问接口
在这里插入图片描述

出现上述的问题因为我们自己生成的 https 证书不被浏览器认可


4.请求转发

考虑到 Spring Boot 不支持同时启动 HTTP 和 HTTPS ,为了解决这个问题,可以选择配置一个请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上

配置如下:

@Configuration
public class TomcatConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
            @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);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }
    private Connector createTomcatConnector() {
        Connector connector = new
                Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8081);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}

如上述代码配置了 Http 的请求端口为 8081,所以所有来自 8081 的请求,将被自动重定向到 8080 这个 https 的端口上。之后,我们再去访问 http 请求,就会自动重定向到 https上了

结语:如上配置,说明无论是在各大网站还是支付环境下都是相对来说安全的,即使我们访问的环境不安全,也会自动重定向到安全环境,对此针对于在Springboot项目中如何配置HTTPS就介绍到这

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值