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

Spring Boot 集成配置 HTTPS的更多相关文章

  1. Spring Boot2 系列教程(八)Spring Boot 中配置 Https

    https 现在已经越来越普及了,特别是做一些小程序或者公众号开发的时候,https 基本上都是刚需了. 不过一个 https 证书还是挺费钱的,个人开发者可以在各个云服务提供商那里申请一个免费的证书 ...

  2. Spring Boot 集成 Swagger2 与配置 OAuth2.0 授权

    Spring Boot 集成 Swagger2 很简单,由于接口采用了OAuth2.0 & JWT 协议做了安全验证,使用过程中也遇到了很多小的问题,多次尝试下述配置可以正常使用. Maven ...

  3. Spring boot集成Swagger,并配置多个扫描路径

    Spring boot集成Swagger,并配置多个扫描路径 1:认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目 ...

  4. spring boot集成mybatis(3) - mybatis generator 配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  5. Spring boot集成Swagger2,并配置多个扫描路径,添加swagger-ui-layer

    Spring boot集成Swagger,并配置多个扫描路径 1:认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目 ...

  6. 解决Spring Boot集成Shiro,配置类使用Autowired无法注入Bean问题

    如题,最近使用spring boot集成shiro,在shiroFilter要使用数据库动态给URL赋权限的时候,发现 @Autowired 注入的bean都是null,无法注入mapper.搜了半天 ...

  7. Spring Boot 属性配置和使用(转)

    Spring Boot 属性配置和使用 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot ...

  8. Spring boot集成swagger2

    一.Swagger2是什么? Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格 ...

  9. spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,guava限流,定时任务案例, 发邮件

    本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...

随机推荐

  1. jQuery.noop

    一个空函数 当你仅仅想要传递一个空函数的时候,就用他吧.这对一些插件作者很有用,当插件提供了一个可选的回调函数接口,那么如果调用的时候没有传递这个回调函数,就用jQuery.noop来代替执行.

  2. c语言学习笔记(8)——函数

    学完c语言的函数可以理解面向过程的语言 函数是c语言的重点 一.为什么需要函数? 1.避免了重复性操作 2.有利于程序的模块化(每一个功能可以用不同函数去实现) 二.什么叫做函数? 逻辑上:能够完成特 ...

  3. 自定义WPF 窗口样式

    原文:自定义WPF 窗口样式 Normal 0 false 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE 自定义 Window 在客户端程序中,经常需 ...

  4. quick-cocos2d-x游戏开发【8】——动画与动作

    动画与动作,在quick中都有对其封装,所以我们还是来看一下吧. 总的来说,对于帧动画,quick封装的方法我们能够常常使用,这是很方便的,以下直接上代码来直观感受下, 比方,14张帧图片,採用coc ...

  5. 用Python模拟浏览器操作

    两种思绪三种要领: 用pamie.建议不要使用,因为pamie为小我私人开发,里面的bug比力多,并且是直接使用win32com体式格局的,如果ie不警惕修改了,后果很严重.另外,pamie3使用的是 ...

  6. 微信小程序特殊效果合集

    微信小程序的开发并不难,但是有时我们想做出比较炫的效果,可能会一时没有思路或找不到方法.下面就整理了微信小程序的一些特殊效果的案例,均来自网络,供你参考. 1.文字跑马灯效果:http://www.w ...

  7. java堆 (转)

     Java栈和堆 ----这两个概念未知很长一段时间,终于找到了一个很好的文本.使用和共享 1. 堆(stack)堆(heap)他们是Java使用Ram本地存储的数据. 与C++不同,Java主动管理 ...

  8. WPF 动态绑定listview的列内容

    Binding binding = new Binding(); binding.Path = new PropertyPath("State"); listViewState.D ...

  9. html 自制属性

    HTML5 允许扩展的(自制的)属性,以 data- 开头 <label id="id0" data-value="0">0</label&g ...

  10. socket函数集-----网络编程必备值得拥有

    accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #include<sys/types.h> #include<sys/ ...