这是泥瓦匠的第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

版权声明:本文为Alandre原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Alandre/p/11114706.html