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。
推薦閱讀:
- springBoot server.port=-1的含義說明
- 使用SpringBoot配置https(SSL證書)
- SpringBoot如何切換成其它的嵌入式Servlet容器(Jetty和Undertow)
- SpringBoot嵌入式Servlet容器與定制化組件超詳細講解
- 詳解如何更改SpringBoot TomCat運行方式