前言:关于HTTP和HTTPS相信大家多少都对其有些了解,而且随着对安全方面的着重,HTTPS普及的也越来越广泛,本片博客将针对于Springboot如何配置HTTPS进行介绍
在介绍关于Springboot配置HTTPS之前,先来简单聊一下关于什么是HTTP和HTTPS,有什么作用,他们之间有什么区别
我们通常使用浏览器去访问一个页面,在浏览器地址栏中我们会看到一串URL,比如: http://www.wxy.com ; 其实这个网站的url分为两部分
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具体协议基本原理,可自行查阅
按照正常情况下我们是需要有一个HTTPS证书,因为证书是需要花费或者去云厂商申请,所以为了方便我们直接使用Java自带的JDK管理工具keytool来生成一个免费的的HTTPS证书
进入到 %JAVA_HOME%\bin 目录下,执行如下一条命令:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\wxy.p12 -validity 365
对于以上命令是什么意思呢,简单介绍如下:
如下为博主的获取截图:
执行完成之后根据你自己设置的相应路径找到相应的文件,如我的为D:/
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
3.我们简单的在controller层里面写个访问资源
@RestController
public class DemoController {
@GetMapping("/start")
public String start(){
return "hello world";
}
4.配置完成后,启动 Spring Boot 项目,此时直接使用 Http 协议来访问接口,就会看到如下错误
出现上述的问题因为我们自己生成的 https 证书不被浏览器认可
考虑到 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就介绍到这