Spring Boot Web开发之SSL配置
SSL的配置是实际应用中常遇到的业务场景。其协议可分为两层:
SSL记录协议:建立在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能支持。
SSL握手协议:其建立在SSL记录协议之上,用于在实际数据传输开始前通信双方身份认证、协商加密算法、交换加密秘钥等。
基于B/S的web应用通过HTTPS实现SSL,即在HTTP下加入SSL层,HTTPS的安全基础是SSL。因为Spring Boot用的是内置Tomcat,因而配置SSL时需要进行如下操作:
1、生成证书
使用SSL首先需要一个证书,可以通过自签名或者SSL证书授权中心获得。本文示范以自授权证书为例:
jdk中有一个工具叫keytool,它就是一个证书管理工具可以用来生产自签名的证书,如下:
输入命令生成秘钥:keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore mykeystore.jks
在当前目录下会新建mykeystore.jks文件
2、Spring Boot配置SSL
将上述文件置于项目根路径下,同时进行如下配置:
启动并提交访问请求:
通过上述访问发现,如果通过http访问会提示访问需要组合TLS。所以直接通过这种方式访问存在着极差的用户体验。解决这个问题就需要做下面的第三步操作。
3、http转向https
实际很多时候输入http会自动转向为https(比如百度试试),要Spring Boot中要实现这个功能需要配置WebServerFactory
以上代码一般情况下通用,不用修改直接用。
补充:在Spring Boot Web开发之Tomcat自动配置中对内置tomcat进行了代码方式的配置用到了WebServerFactoryCustomizer,与此文中用到的WebServerFactory就多了个Customizer,它们之间什么关系呢?看下图: