首頁 > 軟體

SpringBoot設定SSL同時支援http和https存取實現

2022-07-27 14:01:09

傳輸層安全性協定(英語:Transport Layer Security,縮寫作 TLS),及其前身安全通訊協定(Secure Sockets Layer,縮寫作 SSL)是一種安全協定,目的是為網際網路通訊,提供安全及資料完整性保障。

SSL包含記錄層(Record Layer)和傳輸層,記錄層協定確定傳輸層資料的封裝格式。傳輸層安全協定使用X.509認證,之後利用非對稱加密演算來對通訊方做身份認證,之後交換對稱金鑰作為會談金鑰(Session key)。

這個會談金鑰是用來將通訊兩方交換的資料做加密,保證兩個應用間通訊的保密性和可靠性,使客戶與伺服器應用之間的通訊不被攻擊者竊聽。

第一步:生成證書

在設定 TLS/SSL 之前需要先拿到相應的簽名證書,設定了JAVA開發環境,可以使用 Java 下面的 Keytool 來生成證書,開啟控制檯輸入:
keytool -genkey -alias michaelSpica -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore E:TempmichaelSpica.p12 -validity 3650

  • -alias 別名(可隨便取)
  • -storetype 指定金鑰倉庫型別
  • -keyalg 生證書的演演算法名稱,RSA是一種非對稱加密演演算法
  • -keysize 證書大小
  • -keystore 生成的證書檔案的儲存路徑(相對路徑或絕對路徑)
  • -validity 證書的有效期

如圖:

注:正式環境中請填寫標準值

第二步:獲取證書

根據路徑找到生成好的證書,把證書複製到專案裡,如圖:

第三步:增加SSL設定

application.yml 中新增如下設定,如圖:

第四步:設定https存取

新增Spring Boot啟動時,讀取設定資訊,如

(注:請新增必要的jar)

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
package com.michael.protocol.config;

import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created by michael on 2019/2/23.
 */
@Configuration
public class TomcatConfig {

    @Value("${server.http.port}")
    private int httpPort;

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 新增http
        return tomcat;
    }

    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);
        return connector;
    }
}

注:這是 spring boot 2.0.X 版本的

至此,所有工作已經完成,啟動專案,如:

可以看到兩個埠,說明已經成功,即可通過以下兩種方式進行存取:
https://localhost:443
http://localhost:80

到此這篇關於SpringBoot設定SSL同時支援http和https存取實現的文章就介紹到這了,更多相關SpringBoot SSL支援http和https內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com