大家好,我是“追梦蜗牛”,大家可以在公众号后台回复 “Java资料”获得技能提升的资料,绝对是干货。
本文是Spring Boot系列的第六篇,了解前面的文章有助于更好的理解本文:
1.Spring Boot(一)初识Spring Boot框架
2.Spring Boot(二)Spring Boot基本配置
3.Spring Boot(三)Spring Boot自动配置的原理
4.Spring Boot(四)Spring Boot web项目开发
5.Spring Boot(五)Spring Boot web开发项目(2)配置
前言
(一). 生成证书
(二). SSL配置
(三). http转https
上篇文章为大家讲述了 Spring Boot的web项目开发 缺少了一部分配置功能;本篇文章接着上篇内容继续为大家介绍web项目开发的SSL功能。
SSL(安全套接字) 是为网络通讯提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络进行加密。
SSL协议分成两层:SSL记录协议(SSL Record Protocol)他建立在可靠的传输协议之上 如:TCL,可为高层协议提供数据封装,压缩,加密等基本操作,SSL握手协议(SSL Handshake Rrotocol)他建立在SSL协议之上,用于在实际数据传输开始前,通讯双方进行身份认证,协商,加密算法,交换加密密钥等。
在基于B/S的web开发中,是通过HTTPS来实现SSL的,HTTPS是以安全为目标的HTTP通道,简单讲就是HTTP的安全版。
我们现在使用的都是TLS协议(Transport Layer Security,它来源于SSL),而不是SSL。
(一). 生成证书
使用SSL需要一个证书,这个证书可以是自签名的,也可以是SSL证书授权中心获得的,这里我们只说 自授权证书的生成。
首先每一个JDK或者JRE都有一个工具叫keytool他是一个证书管理工具,可以生成自签名证书。
控制台输入如下命令:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
参数解释:
1.-storetype 指定密钥类型
2.-keyalg 生证书的算法名称,RSA是一种非对称加密算法
3.-keysize 证书大小
4.-keystore 生成的证书文件的存储路径
5.-validity 证书有效期
操作如下图:
操作完成后 会在当前用户目录生成一个 keystore.p12文件
(二). SSL配置
上一步我们生成了自签名文件,那么我们需要配置一下 ,首先我们将自签名文件拷贝到根目录下(这个路径可以修改,也可以是static下面)
然后在application.propetions中添加SSL配置,让支持HTTPS,如下:
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=111111
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias:tomcat
参数解释:
1. 指定签名文件,2. 指定签名密码,3. 指定密钥类型,4. 是别名。
OK,这样配置完成之后我们就可以通过访问看看效果了,这时候启动项目 控制台可以看出配置的https。
访问效果如下:
(三). http转https
很多时候,我们在输入地址栏的是http,但是发现会自动转向到https,比如访问百度,就是这样的情况,那么我们实现这种https转向https的功能,需要在入口类中添加转向Bean 代码如下:
// springboot2 写法
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = 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);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(8081);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(8443);
return connector;
}
这里面的 Connector 是 Tomcat的Connector节点。
再次启动项目,访问http://localhost:8081 会自动转到 https://localhost:8443
ok,Spring Boot的web项目开发相关配置 到这里就完成了,如果小伙伴还有疑问,可以 公众号 加群,我们一起进步
参考:
1. 《JavaEE开发的颠覆者 Spring Boot实战》
本案例下载地址:
https://github.com/ProceduralZC/itcxzc/tree/master/springboot_6
- End -
长按二维码关注
期待您的加入
▽
近期推荐阅读:
职场我们如何寻找自己的定位?
IT项目开发流程
怎样才能算自由者?
频繁跳槽会有什么不好的影响?
资源整理:
包括不限于Java、Python、Linux、前端、人工智能、架构、大数据、电子书 ,移动端,小程序,项目等