Spring Boot 整合配置 HTTPS
阿新 • • 發佈:2019-07-01
這是泥瓦匠的第108篇原創
文章工程:
- JDK 1.8
- Maven 3.5.2
- Spring Boot 1.5.9.RELEASE
一、HTTPS 是什麼
問:什麼是HTTP? 答:HTTP是一個客戶端和伺服器端請求和響應的標準TCP協議。
比如開啟我的部落格地址:
https://www.bysocket.com
多了個 S,其實 S 表示 TLS、SSL。因此 HTTP 的基礎架構如圖所示:
HTTP協議(HyperText Transfer Protocol),即超文字傳輸協議是用於伺服器傳輸到客戶端瀏覽器的傳輸協議。Web上,伺服器和客戶端利用HTTP協議進行通訊會話。那整合 HTTPS ,簡單來說,修改 Tomcat 容器配置,加一層對應的安全約束配置即可。
二、申請 HTTPS
2.1 申請SSL證書
開啟阿里雲證書,可以申請免費一年。一年後繼續免費申請一年即可。
下載,這塊選擇 Tomcat ,因為這次整合只需要修改 Spring Boot 內嵌容器 Tomcat 配置。如果是 nginx ,也可以對應下載並整合配置
2.2 證書檔案介紹
在證書控制檯下載Tomcat版本證書,下載到本地的是一個壓縮檔案,解壓后里麵包含.pfx檔案是證書檔案,pfx_password.txt是證書檔案的密碼。
另外兩種配置模式:
- PFX證書安裝
- JKS證書安裝
本文使用 PFX證書安裝。
三、配置 HTTPS
將 .pfx 檔案複製到 resources 根目錄,然後配置 application-prod.properties (生產配置檔案):
## 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 類,程式碼如下
@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:
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