springboot如何配置ssl支持https
springboot 配置ssl支持https
以下信息請(qǐng)根據(jù)實(shí)際情況修改?。?!
創(chuàng)建keystore
KeyStore是一個(gè)用于存儲(chǔ)和管理加密密鑰和證書的存儲(chǔ)庫。
它通常被用于各種應(yīng)用和系統(tǒng)中,以保護(hù)敏感數(shù)據(jù)和確保安全通信。
KeyStore可以被看作是一種加密的“保險(xiǎn)箱”,用于存放密鑰、密鑰對(duì)和證書等安全相關(guān)的數(shù)據(jù)。
通過java的keytool創(chuàng)建keyStore
keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 -storepass mypassword -keypass mypassword -dname "CN=localhost, OU=MyOrg, O=MyOrg, L=MyCity, ST=MyState, C=MyCountry"
解釋各個(gè)參數(shù):
-genkeypair:生成密鑰對(duì)(公鑰和私鑰)。-alias mykey:指定密鑰的別名(在密鑰庫中引用密鑰時(shí)使用)。-keyalg RSA:指定密鑰算法(這里是 RSA)。-keysize 2048:指定密鑰大?。ㄎ唬?/li>-keystore keystore.jks:指定密鑰庫文件的名稱(如果文件不存在,則創(chuàng)建它)。-validity 365:指定證書的有效期(天)。-storepass mypassword:指定密鑰庫的存儲(chǔ)密碼。-keypass mypassword:指定密鑰的密碼(如果與密鑰庫密碼相同,可以省略)。-dname:指定證書的主題信息(DN,Distinguished Name),包括通用名稱(CN)、組織單位(OU)、組織(O)、城市(L)、州/?。⊿T)和國家(C)。
在springboot的application.yml配置文件中配置相關(guān)內(nèi)容
server:
port: 8443 # HTTPS的默認(rèn)端口是443,但443端口通常需要管理員權(quán)限才能綁定
ssl:
key-store: classpath:keystore.jks # 密鑰庫的位置,相對(duì)于classpath 對(duì)應(yīng)keytool生成時(shí)的-keystore
key-store-type: JKS # 密鑰庫類型,默認(rèn)為JKS
key-store-password: mypassword # 密鑰庫密碼 對(duì)應(yīng)keytool生成時(shí)的-storepass
key-alias: mykey # 密鑰別名 對(duì)應(yīng)keytool生成時(shí)的-alias
key-password: mypassword # 密鑰別名 對(duì)應(yīng)keytool生成時(shí)的-keypass
# 如果你使用的是PKCS12密鑰庫,則需要如下配置,相應(yīng)信息根據(jù)實(shí)際情況修改
# key-store-type: PKCS12
# key-store: classpath:keystore.p12
# key-store-password: yourpassword
# 如果需要,還可以配置信任庫
# trust-store: classpath:truststore.jks
# trust-store-password: trustpassword
# trust-store-type: JKS
# 啟用SSL客戶端認(rèn)證(可選)
# client-auth: needspringboot應(yīng)用支持https實(shí)現(xiàn)
jdk自帶證書生成
切換到j(luò)dk目錄下bin目錄,執(zhí)行
- keytool -genkey -alias (別名)
- -dname "CN=(姓名),OU=(組織單位名稱),O=(組織名稱),L=(城市名稱),ST=(省),C=(國家)"
- -storetype (密鑰倉庫類型)
- -keyalg (生證書的算法名稱) -keysize (密鑰長度,證書大小)
- -keystore (指定生成證書的位置和證書名稱)
- -validity (證書有效期,天單位)
列:
keytool -genkey -alias lyc -dname "CN=l,OU=SC,O=yd,L=lc,ST=sc,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365
配置https協(xié)議

springboot+tomcat,增加代碼configuration配置項(xiàng)如下:
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatHttpsConfig {
@Bean
public Connector connector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setSecure(false);
connector.setPort(80);
connector.setRedirectPort(443);
return connector;
}
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
TomcatServletWebServerFactory webServerFactory = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection securityCollection = new SecurityCollection();
securityCollection.addPattern("/*");
securityConstraint.addCollection(securityCollection);
context.addConstraint(securityConstraint);
}
};
webServerFactory.addAdditionalTomcatConnectors(connector);
return webServerFactory;
}
}springboot+undertow,增加代碼configuration配置項(xiàng)如下:
import io.undertow.Undertow;
import io.undertow.UndertowOptions;
import io.undertow.servlet.api.SecurityConstraint;
import io.undertow.servlet.api.SecurityInfo;
import io.undertow.servlet.api.TransportGuaranteeType;
import io.undertow.servlet.api.WebResourceCollection;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
public class UndertowHttpsConfig {
private int httpPort = 80;
private int httpsPort = 443;
@Bean
public ServletWebServerFactory undertowFactory() {
UndertowServletWebServerFactory undertowFactory = new UndertowServletWebServerFactory();
undertowFactory.addBuilderCustomizers((Undertow.Builder builder) -> {
builder.addHttpListener(httpPort, "0.0.0.0");
// 開啟HTTP2
builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true);
});
undertowFactory.addDeploymentInfoCustomizers(deploymentInfo -> {
// 開啟HTTP自動(dòng)跳轉(zhuǎn)至HTTPS
deploymentInfo.addSecurityConstraint(new SecurityConstraint()
.addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*"))
.setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
.setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
.setConfidentialPortManager(exchange -> httpsPort);
});
return undertowFactory;
}
}完成以上配置之后,啟動(dòng)項(xiàng)目
訪問:https://localhost:443/test/test實(shí)現(xiàn)springboot的https協(xié)議訪問
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring項(xiàng)目中Ordered接口的應(yīng)用之全局過濾器(GlobalFilter)的順序控制
在Spring框架,尤其是Spring Cloud Gateway或Spring WebFlux項(xiàng)目中,Ordered接口扮演著重要的角色,特別是在實(shí)現(xiàn)全局過濾器(GlobalFilter)時(shí),用于控制過濾器執(zhí)行的優(yōu)先級(jí),下面將介紹如何在Spring項(xiàng)目中使用Ordered接口來管理Global Filter的執(zhí)行順序,需要的朋友可以參考下2024-06-06
兩萬字詳解Java Sring String的常見操作以及StringBuffer StringBuilder的區(qū)別
本篇文章帶你認(rèn)識(shí)Sring、String的常見操作和StringBuffer 與StringBuilder的區(qū)別(字符串詳解),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Spring boot按日切分spring boot的nohup.out日志文件的方法
過大的日志文件維護(hù)起來存在諸多問題,所以最好是能夠按日或按大小切分日志文件,下面小編給大家?guī)砹薙pring boot按日切分spring boot的nohup.out日志文件的方法,一起看看吧2018-08-08
SpringBoot使用CommandLineRunner和ApplicationRunner執(zhí)行初始化業(yè)務(wù)方式
這篇文章主要介紹了SpringBoot使用CommandLineRunner和ApplicationRunner執(zhí)行初始化業(yè)務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
java操作mongodb之多表聯(lián)查的實(shí)現(xiàn)($lookup)
這篇文章主要介紹了java操作mongodb之多表聯(lián)查的實(shí)現(xiàn)($lookup),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

