大家好,我是“追梦蜗牛”,大家可以在公众号后台回复 “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 证书有效期

操作如下图:

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

 

操作完成后 会在当前用户目录生成一个 keystore.p12文件

Spring Boot(六)Spring Boot的web项目开发(3)SSL配置_公众号_02

 

(二). 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。

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

 

访问效果如下:

 

Spring Boot(六)Spring Boot的web项目开发(3)SSL配置_端口号_04

 

(三). 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

 

 

Spring Boot(六)Spring Boot的web项目开发(3)SSL配置_web项目_05

 

 

 

- End -

 

 

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

长按二维码关注

期待您的加入

 

 

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

 

 

近期推荐阅读:

职场我们如何寻找自己的定位?

IT项目开发流程

怎样才能算自由者?

频繁跳槽会有什么不好的影响?

 

资源整理:
包括不限于Java、Python、Linux、前端、人工智能、架构、大数据、电子书 ,移动端,小程序,项目等