Spring Boot 集成配置 HTTPS

這是泥瓦匠的第108篇原創html

文章工程:java

  • JDK 1.8
  • Maven 3.5.2
  • Spring Boot 1.5.9.RELEASE

1、HTTPS 是什麼

問:什麼是HTTP? 答:HTTP是一個客戶端和服務器端請求和響應的標準TCP協議。nginx

好比打開個人博客地址:算法

https://www.bysocket.com

多了個 S,其實 S 表示 TLS、SSL。所以 HTTP 的基礎架構如圖所示:spring

file

HTTP協議(HyperText Transfer Protocol),即超文本傳輸協議是用於服務器傳輸到客戶端瀏覽器的傳輸協議。Web上,服務器和客戶端利用HTTP協議進行通訊會話。那集成 HTTPS ,簡單來講,修改 Tomcat 容器配置,加一層對應的安全約束配置便可。瀏覽器

2、申請 HTTPS

2.1 申請SSL證書

打開阿里雲證書,能夠申請免費一年。一年後繼續免費申請一年便可。tomcat

下載,這塊選擇 Tomcat ,由於此次集成只須要修改 Spring Boot 內嵌容器 Tomcat 配置。若是是 nginx ,也能夠對應下載並集成配置安全

2.2 證書文件介紹

在證書控制檯下載Tomcat版本證書,下載到本地的是一個壓縮文件,解壓后里麪包含.pfx文件是證書文件,pfx_password.txt是證書文件的密碼。springboot

file

另外兩種配置模式:服務器

  • PFX證書安裝
  • JKS證書安裝

本文使用 PFX證書安裝。

3、配置 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 進行操做

參考資料

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

相關文章
相關標籤/搜索