Spring Boot 集成配置 HTTPS

  • 时间:
  • 浏览:1

这是泥瓦匠的第108篇原创 文章工程: * JDK 1.8 * Maven 3.5.2 * Spring Boot 1.5.9.RELEASE ## 一、HTTPS 是哪些地方 问:哪些地方是HTTP? 答:HTTP是三个多多 客户端和服务器端请求和响应的标准TCP协议。 比如打开我的博客地址: ```java https://www.bysocket.com ``` 多了个 S,人太好 S 表示 TLS、SSL。但会 HTTP 的基础架构如图所示: ![file](https://www.bysocket.com/wp-content/uploads/2015/05/1_thumb.png) HTTP协议(HyperText Transfer Protocol),即超文本传输协议是用于服务器传输到客户端浏览器的传输协议。Web上,服务器和客户端利用HTTP协议进行通信会话。那集成 HTTPS ,简单来说,修改 Tomcat 容器配置,加一层对应的安全约束配置即可。 ## 二、申请 HTTPS #### 2.1 申请SSL证书 打开阿里云证书,还能不能申请免费一年。一年后继续免费申请一年即可。 下载,这块选则 Tomcat ,可能这次集成只需要修改 Spring Boot 内嵌容器 Tomcat 配置。可能是 nginx ,也还能不能对应下载并集成配置 #### 2.2 证书文件介绍 在证书控制台下载Tomcat版本证书,下载到本地的是三个多多 压缩文件,解压后上边蕴藏 .pfx文件是证书文件,pfx_password.txt是证书文件的密码。 ![file](http://www.bysocket.com/wp-content/uploads/2019/06/3.png) 另外有两种配置模式: - PFX证书安装 - JKS证书安装 本文使用 PFX证书安装。 ## 三、配置 HTTPS 将 .pfx 文件qq克隆好友 到 resources 根目录,但会 配置 application-prod.properties (生产配置文件): ```java ## HTTPS server.ssl.key-store=classpath:xx.com.pfx server.ssl.key-store-password=123456 server.ssl.key-store-type=PKCS12 server.port=443 ``` 配置项如下: - server.port HTTPS 加密端口 - server.ssl.key-store SSL证书路径 - server.ssl.key-store-password SSL证书密码 - server.ssl.key-store-type 证书类型 但会 新增 HttpsConfig 类,代码如下 ```java @Configuration public class HttpsConfig { /** * spring boot 1.x */ /* */ @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @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); } }; return tomcat; } } ``` 运行即可,从日志看出可能支持 HTTPS: ```java 2019-06-16 10:42:42.989 INFO 16727 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 443 (https) 2019-06-16 10:42:45.782 INFO 16727 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 443 (https) ``` 注意点: - 这是 1.x 的配置,2.x 版本有所不同 - https 默认端口号是 443。本机环境会端口占用还能不能改成 400400 等 - 可能一台机器三个多多 HTTPS 服务,那末 还能不能通过 setRedirectPort 进行操作 ### 参考资料 * Spring Boot 2.x 系列:https://www.bysocket.com/springboot * spring.io 官方文档 ### 以下专题教程跟我说您会有兴趣 - 《守护任务管理器兵法:算法与数据特性》 https://www.bysocket.com/technique/2314.html - 《Spring Boot 2.x 系列教程》 https://www.bysocket.com/springboot - 《Java 核心系列教程》 https://www.bysocket.com/technique/2400.html