Spring Boot 集成配置 HTTPS
程序员文章站
2022-06-22 12:41:20
这是泥瓦匠的第108篇原创 文章工程: * JDK 1.8 * Maven 3.5.2 * Spring Boot 1.5.9.RELEASE ## 一、HTTPS 是什么 问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP协议。 比如打开我的博客地址: ```java ......
这是泥瓦匠的第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 文件复制到 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。本机环境会端口占用可以改成 8080 等
- 如果一台机器两个 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/2100.html
上一篇: Vue 浅谈前端js框架vue
下一篇: 【JQuery】效果