SpringBoot對SSL的支持實現(xiàn)
Spring Boot 提供了配置 SSL 信任材料的能力,這些材料可以應(yīng)用于多種類型的連接,以支持安全通信??梢允褂靡?nbsp;spring.ssl.bundle 為前綴的配置屬性來指定命名的信任材料集和相關(guān)信息。
https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#features.ssl
使用 Java KeyStore 文件配置 SSL
可以使用以 spring.ssl.bundle.jks 為前綴的配置屬性來配置使用 Java keytool 實用程序創(chuàng)建的信任材料包,并將這些包存儲在 JKS 或 PKCS12 格式的 Java KeyStore 文件中。每個包都有一個用戶提供的名稱,可用于引用該包。
當(dāng)用于保護(hù)嵌入式 Web 服務(wù)器時,通常會將keystore 配置為包含證書和私鑰的 Java KeyStore,如下所示:
spring.ssl.bundle.jks.mybundle.key.alias=application spring.ssl.bundle.jks.mybundle.keystore.location=classpath:application.p12 spring.ssl.bundle.jks.mybundle.keystore.password=secret spring.ssl.bundle.jks.mybundle.keystore.type=PKCS12
當(dāng)用于保護(hù)客戶端連接時,通常會將truststore 配置為包含服務(wù)器證書的 Java KeyStore,如下所示:
spring.ssl.bundle.jks.mybundle.truststore.location=classpath:server.p12 spring.ssl.bundle.jks.mybundle.truststore.password=secret
使用 PEM 編碼的證書配置 SSL
可以使用以 spring.ssl.bundle.pem 為前綴的配置屬性來配置以 PEM 編碼文本形式存在的信任材料包。每個包都有一個用戶提供的名稱,可用于引用該包。
當(dāng)用于保護(hù)嵌入式 Web 服務(wù)器時,通常會將keystore 配置為包含證書和私鑰,如下所示:
spring.ssl.bundle.pem.mybundle.keystore.certificate=classpath:application.crt spring.ssl.bundle.pem.mybundle.keystore.private-key=classpath:application.key
當(dāng)用于保護(hù)客戶端連接時,通常會將truststore 配置為包含服務(wù)器證書,如下所示:
spring.ssl.bundle.pem.mybundle.truststore.certificate=classpath:server.crt
提示:certificate 和private-key屬性可以直接使用 PEM 內(nèi)容。如果屬性值包含 BEGIN 和 END 標(biāo)記,則它們將被視為 PEM 內(nèi)容,而不是資源位置。
以下示例演示了如何定義信任庫證書:
spring.ssl.bundle.pem.mybundle.truststore.certificate=\ -----BEGIN CERTIFICATE-----\n\ MIID1zCCAr+gAwIBAgIUNM5QQv8IzVQsgSmmdPQNaqyzWs4wDQYJKoZIhvcNAQEL\n\ BQAwezELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCVN0YXRlTmFtZTERMA8GA1UEBwwI\n\ ...\n\ V0IJjcmYjEZbTvpjFKznvaFiOUv+8L7jHQ1/Yf+9c3C8gSjdUfv88m17pqYXd+Ds\n\ HEmfmNNjht130UyjNCITmLVXyy5p35vWmdf95U3uEbJSnNVtXH8qRmN9oK9mUpDb\n\ ngX6JBJI7fw7tXoqWSLHNiBODM88fUlQSho8\n\ -----END CERTIFICATE-----\n
應(yīng)用 SSL 包(Applying SSL Bundles)
一旦使用屬性進(jìn)行配置,就可以在由 Spring Boot 自動配置的各種類型連接的配置屬性中通過名稱引用 SSL 包。
使用 SSL 包(Using SSL Bundles)
Spring Boot 會自動配置一個 SslBundles 類型的 bean,該 bean 可提供對使用 spring.ssl.bundle 屬性配置的每個命名包的訪問。
可以從自動配置的 SslBundles bean 中檢索 SslBundle,并使用它來創(chuàng)建用于在客戶端庫中配置 SSL 連接的對象。SslBundle 提供了一種分層的方法來獲取這些 SSL 對象:
getStores()可用于訪問密鑰庫和信任庫的java.security.KeyStore實例,以及任何所需的密鑰庫密碼。getManagers()可用于訪問java.net.ssl.KeyManagerFactory和java.net.ssl.TrustManagerFactory實例,以及它們創(chuàng)建的java.net.ssl.KeyManager和java.net.ssl.TrustManager數(shù)組。createSslContext()提供了一種便捷的方式來獲取新的java.net.ssl.SSLContext實例。
此外,SslBundle 還提供了有關(guān)正在使用的密鑰、要使用的協(xié)議以及應(yīng)應(yīng)用于 SSL 引擎的任何選項的詳細(xì)信息。
以下示例演示了如何檢索 SslBundle 并使用它來創(chuàng)建 SSLContext:
import javax.net.ssl.SSLContext;
import org.springframework.boot.ssl.SslBundle;
import org.springframework.boot.ssl.SslBundles;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public MyComponent(SslBundles sslBundles) {
SslBundle sslBundle = sslBundles.getBundle("mybundle");
SSLContext sslContext = sslBundle.createSslContext();
// do something with the created sslContext
}
}
重新加載 SSL 包(Reloading SSL bundles)
當(dāng)密鑰材料發(fā)生更改時,可以重新加載 SSL 包。使用包的組件必須與可重新加載的 SSL 包兼容。目前,以下組件與此兼容:
- Tomcat Web 服務(wù)器
- Netty Web 服務(wù)器
要啟用重新加載,你需要通過以下示例中的配置屬性進(jìn)行選擇:
spring.ssl.bundle.pem.mybundle.reload-on-update=true spring.ssl.bundle.pem.mybundle.keystore.certificate=file:/some/directory/application.crt spring.ssl.bundle.pem.mybundle.keystore.private-key=file:/some/directory/application.key
然后,文件監(jiān)視器將監(jiān)視這些文件,如果文件發(fā)生更改,將重新加載 SSL 包。這反過來會觸發(fā)使用組件的重新加載,例如,Tomcat 將對啟用 SSL 的連接器中的證書進(jìn)行輪換。
你可以使用 spring.ssl.bundle.watch.file.quiet-period 屬性來配置文件監(jiān)視器的靜默期(以確保沒有更多更改)。
到此這篇關(guān)于SpringBoot對SSL的支持實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot SSL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署的過程
這篇文章主要介紹了從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
springboot 多數(shù)據(jù)源的實現(xiàn)(最簡單的整合方式)
這篇文章主要介紹了springboot 多數(shù)據(jù)源的實現(xiàn)(最簡單的整合方式),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用
今天小編就為大家分享一篇關(guān)于Junit 5中@ParameterizedTest與@EnumSource結(jié)合使用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

