SpringBoot應(yīng)用的接口訪問從HTTP改為HTTPS
LINUX
1. 生成 SSL 證書
使用工具(如 `keytool` 或 `openssl`)生成 SSL 證書。以下以 `keytool` 為例:
keytool -genkeypair -alias mydomain -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650
- 輸入密碼并填寫證書信息。
- 生成的 `keystore.p12` 文件需放在項(xiàng)目的 `src/main/resources` 目錄下。
2. 配置 Spring Boot 的 HTTPS
在 `application.properties` 或 `application.yml` 中添加 SSL 配置:
# 啟用 HTTPS server.port=8443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=your_password server.ssl.key-alias=mydomain
3. HTTP 自動重定向到 HTTPS(可選)
強(qiáng)制所有 HTTP 請求跳轉(zhuǎn)到 HTTPS:
import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; 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; @Configuration public class HttpsConfig { @Bean public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; tomcat.addAdditionalTomcatConnectors(redirectConnector()); return tomcat; } private Connector redirectConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); // HTTP 端口 connector.setSecure(false); connector.setRedirectPort(8443); // 重定向到 HTTPS 端口 return connector; } }
4. 測試 HTTPS 訪問
啟動應(yīng)用后,訪問:
https://localhost:8443/your-api
- 瀏覽器可能會提示證書不安全(自簽名證書),選擇繼續(xù)訪問即可。
5. 生產(chǎn)環(huán)境注意事項(xiàng)
- 證書來源:生產(chǎn)環(huán)境建議使用受信任的證書頒發(fā)機(jī)構(gòu)(如 Let's Encrypt)簽發(fā)的證書。
- 密鑰管理:避免將密碼硬編碼在配置文件中,可使用環(huán)境變量或配置中心。
- 防火墻配置:確保服務(wù)器的 443 端口(或自定義 HTTPS 端口)已開放。
常見問題排查
- 證書路徑錯(cuò)誤:檢查 `server.ssl.key-store` 路徑是否正確。
- 密碼錯(cuò)誤:確認(rèn) `server.ssl.key-store-password` 與生成證書時(shí)設(shè)置的密碼一致。
- 端口沖突:確保 HTTP/HTTPS 端口未被占用。
完成以上步驟后,Spring Boot 接口即可通過 HTTPS 訪問。
windows
在 Windows 服務(wù)器上生成 SSL 證書,可以通過以下兩種常見方法實(shí)現(xiàn):
方法 1:使用 Java 自帶的 `keytool`(推薦)
`keytool` 是 JDK 自帶的密鑰管理工具,無需額外安裝,適合生成自簽名證書。
步驟:
1. 打開命令提示符(CMD)
按 `Win + R`,輸入 `cmd` 后回車。
2. 定位到 JDK 的 `bin` 目錄
如果已配置 JDK 環(huán)境變量,可直接使用 `keytool`。
否則需要進(jìn)入 JDK 安裝目錄,例如:
cd C:\Program Files\Java\jdk1.8.0_361\bin
3. 生成 PKCS12 格式的密鑰庫
運(yùn)行以下命令生成證書(替換 `-keystore` 路徑和密碼):
keytool -genkeypair -alias mydomain -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore E:\path\to\keystore.p12 -validity 3650
- 根據(jù)提示輸入密碼、姓名(域名)、組織等信息。
- `-keystore`:生成的證書文件路徑(建議放在項(xiàng)目資源目錄,如 `src/main/resources`)。
4. 驗(yàn)證生成結(jié)果
檢查文件 `keystore.p12` 是否生成成功。
方法 2:使用 OpenSSL(適合生成通用證書)
如果需要生成 PFX 證書(兼容 IIS 或其他服務(wù)),可以使用 OpenSSL。
步驟:
1. 安裝 OpenSSL
- 下載 Windows 版 OpenSSL:
[OpenSSL 官方二進(jìn)制包](https://slproweb.com/products/Win32OpenSSL.html)
或使用 Chocolatey 安裝:
choco install openssl
2. 生成私鑰和證書
打開命令提示符,運(yùn)行以下命令:
openssl req -x509 -newkey rsa:2048 -nodes ^ -keyout private.key ^ -out certificate.crt ^ -days 3650
- 根據(jù)提示填寫證書信息(國家、組織、域名等)。
3. 生成 PFX 文件(可選)
將私鑰和證書合并為 PFX 格式(Spring Boot 可直接使用):
openssl pkcs12 -export ^ -in certificate.crt ^ -inkey private.key ^ -out keystore.pfx
- 輸入導(dǎo)出密碼(需與 Spring Boot 配置中的 `server.ssl.key-store-password` 一致)。
Spring Boot 配置
將生成的證書(`keystore.p12` 或 `keystore.pfx`)放入項(xiàng)目的 `src/main/resources` 目錄,并在 `application.properties` 中配置:
server.port=8443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:keystore.p12 # 或 keystore.pfx server.ssl.key-store-password=your_password server.ssl.key-alias=mydomain # 使用 keytool 時(shí)需指定別名
常見問題解決
1. keytool` 命令找不到
- 檢查 JDK 是否安裝,并確保 `keytool` 所在目錄已添加到系統(tǒng)環(huán)境變量 `PATH`。
2. 證書密碼錯(cuò)誤
- 確保 `server.ssl.key-store-password` 與生成證書時(shí)設(shè)置的密碼一致。
3. 端口沖突
- 檢查 `server.port` 是否被其他進(jìn)程占用(如 443 或 8443)。
4. 瀏覽器提示證書不安全
- 自簽名證書會觸發(fā)警告,生產(chǎn)環(huán)境建議替換為受信任的 CA 證書(如 Let's Encrypt)。
附:轉(zhuǎn)換 PFX 到 JKS 格式(可選)
如果需兼容舊版 Java 應(yīng)用,可將 PFX 轉(zhuǎn)換為 JKS:
keytool -importkeystore ^ -srckeystore keystore.pfx ^ -srcstoretype PKCS12 ^ -destkeystore keystore.jks ^ -deststoretype JKS
通過以上步驟,即可在 Windows 服務(wù)器上生成 SSL 證書并配置 Spring Boot 的 HTTPS 訪問。
到此這篇關(guān)于SpringBoot應(yīng)用的接口訪問從HTTP改為HTTPS的文章就介紹到這了,更多相關(guān)SpringBoot 接口訪問HTTP改為HTTPS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用
網(wǎng)絡(luò)數(shù)據(jù)的基本單位永遠(yuǎn)是byte,Java NIO提供ByteBuffer作為字節(jié)的容器,但該類過于復(fù)雜,有點(diǎn)難用.本篇文章就帶大家簡單了解一下 ,需要的朋友可以參考下2021-06-06淺談MyBatis3 DynamicSql風(fēng)格語法使用指南
這篇文章主要介紹了淺談MyBatis3 DynamicSql風(fēng)格語法使用指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Spring Boot 2 實(shí)戰(zhàn):自定義啟動運(yùn)行邏輯實(shí)例詳解
這篇文章主要介紹了Spring Boot 2 實(shí)戰(zhàn):自定義啟動運(yùn)行邏輯,結(jié)合實(shí)例形式詳細(xì)分析了Spring Boot 2自定義啟動運(yùn)行邏輯詳細(xì)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-05-05java實(shí)現(xiàn)Flappy Bird游戲源代碼
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Flappy Bird游戲源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12spring boot微服務(wù)自定義starter原理詳解
這篇文章主要介紹了spring boot微服務(wù)自定義starter原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12