SpringBoot中配置SSL的同時支持http和https訪問

傳輸層安全性協議(英語: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:\Temp\michaelSpica.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

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: