Spring Boot (六)web项目开发中的SSL配置

关注公众号【程序职场】,专注于 Spring Boot+微服务,小程序,flutter,Android,定期文章和视频教程分享,以及 职场规划,运营管理 等,关注后回复   Java资料 ,领取为你精心准备的 学习 干货!

大家好,我是“追梦蜗牛”,大家可以在公众号后台回复 “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.p12server.ssl.key-store-password=111111server.ssl.keyStoreType=PKCS12server.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. 图解HTTPS https://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html
2. 《JavaEE开发的颠覆者 Spring Boot实战》

本案例下载地址:

https://github.com/ProceduralZC/itcxzc/tree/master/springboot_6

关注公众号【程序职场】,专注于 Spring Boot+微服务,小程序,flutter,Android,定期文章和视频教程分享,关注后回复   Java资料 ,领取为你精心准备的 学习 干货!

发布了55 篇原创文章 · 获赞 101 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/jianpengxuexikaifa/article/details/102888258