1. 程式人生 > >Spring Boot 整合配置 HTTPS

Spring Boot 整合配置 HTTPS

這是泥瓦匠的第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 的基礎架構如圖所示:

file

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

另外兩種配置模式:

  • 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 進行操作

參考資料

以下專題教程也許您會有興趣