springboot如何配置ssl支持https
springboot 配置ssl支持https
以下信息請根據(jù)實際情況修改?。?!
創(chuàng)建keystore
KeyStore是一個用于存儲和管理加密密鑰和證書的存儲庫。
它通常被用于各種應(yīng)用和系統(tǒng)中,以保護敏感數(shù)據(jù)和確保安全通信。
KeyStore可以被看作是一種加密的“保險箱”,用于存放密鑰、密鑰對和證書等安全相關(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"
解釋各個參數(shù):
-genkeypair
:生成密鑰對(公鑰和私鑰)。-alias mykey
:指定密鑰的別名(在密鑰庫中引用密鑰時使用)。-keyalg RSA
:指定密鑰算法(這里是 RSA)。-keysize 2048
:指定密鑰大?。ㄎ唬?。-keystore keystore.jks
:指定密鑰庫文件的名稱(如果文件不存在,則創(chuàng)建它)。-validity 365
:指定證書的有效期(天)。-storepass mypassword
:指定密鑰庫的存儲密碼。-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 # 密鑰庫的位置,相對于classpath 對應(yīng)keytool生成時的-keystore key-store-type: JKS # 密鑰庫類型,默認(rèn)為JKS key-store-password: mypassword # 密鑰庫密碼 對應(yīng)keytool生成時的-storepass key-alias: mykey # 密鑰別名 對應(yīng)keytool生成時的-alias key-password: mypassword # 密鑰別名 對應(yīng)keytool生成時的-keypass # 如果你使用的是PKCS12密鑰庫,則需要如下配置,相應(yīng)信息根據(jù)實際情況修改 # 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: need
springboot應(yīng)用支持https實現(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配置項如下:
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配置項如下:
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自動跳轉(zhuǎn)至HTTPS deploymentInfo.addSecurityConstraint(new SecurityConstraint() .addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*")) .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL) .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT)) .setConfidentialPortManager(exchange -> httpsPort); }); return undertowFactory; } }
完成以上配置之后,啟動項目
訪問:https://localhost:443/test/test實現(xiàn)springboot的https協(xié)議訪問
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java如何發(fā)起http請求的實現(xiàn)(GET/POST)
這篇文章主要介紹了Java如何發(fā)起http請求的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03String?concat(String?str)使用小結(jié)
這篇文章主要介紹了String?concat(String?str)使用小結(jié),在了解concat()之前,首先需要明確的是String的兩點特殊性,一是長度不可變二是值不可變,本文給大家詳細(xì)講解,需要的朋友可以參考下2022-11-11Java常用數(shù)字工具類 大數(shù)乘法、加法、減法運算(2)
這篇文章主要為大家詳細(xì)介紹了Java常用數(shù)字工具類,大數(shù)乘法、加法、減法運算,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05SpringBoot3.0自定stater模塊的操作流程(chatGPT提供的49種場景)
SpringBoot3.0發(fā)布等重磅陸消息續(xù)進入大家的視線,而本文作者將以技術(shù)整合的角度,帶大家把最火的兩個技術(shù)整合在一起,通過本文學(xué)習(xí)你將熟悉SpringBoot3.0自定stater模塊的操作流程,并熟悉OpenAi為chatGPT提供的49種場景,感興趣的朋友一起看看吧2022-12-12Java如何實現(xiàn)URL帶請求參數(shù)(get/post)及得到get和post請求url和參數(shù)列表的方法
本文給大家介紹Java如何實現(xiàn)URL帶請求參數(shù)(get/post)及得到get和post請求url和參數(shù)列表的方法,涉及到 java獲取post請求參數(shù)的方法,感興趣的朋友一起看看吧2015-10-10