最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot配置Https訪問的詳細(xì)步驟

 更新時(shí)間:2024年02月01日 09:50:21   作者:好漢不吃草  
HTTP(Hypertext transfer protocal)是一種詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間相互通信的規(guī)則,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議,這篇文章主要介紹了SpringBoot配置Https訪問的詳細(xì)步驟,需要的朋友可以參考下

一、Https協(xié)議

  • HTTP(Hypertext transfer protocal)是一種詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間相互通信的規(guī)則,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議。
  • HTTPS(Hypertext transfer protocal over Secure Socket Layer)是以安全為目標(biāo)的http通道,https的安全基礎(chǔ)是ssl,因此加密的詳細(xì)內(nèi)容就需要ssl。https協(xié)議需要到ca申請證書(一般免費(fèi)的證書很少)。
  • http是超文本傳輸協(xié)議,信息是明文傳輸?shù)模╤ttp協(xié)議是不安全的,黑客可以在用戶和服務(wù)器之間設(shè)置攔截器竊取傳輸?shù)膬?nèi)容。也可以偽造用戶提交的表單向服務(wù)器發(fā)出請求,從而獲取到服務(wù)器的響應(yīng))。https則是具有安全性的ssl加密傳輸協(xié)議,http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

超文本傳輸安全協(xié)議(Https,也被稱作HTTP over TLS, HTTP over SSL或者HTTP Secure)是一種網(wǎng)絡(luò)安全的傳輸協(xié)議,SSL(Secure Socket Layer,安全套接字層),TLS(Transport Layer Security,傳輸層安全協(xié)議),HTTPS開發(fā)的主要目的,是提供對網(wǎng)絡(luò)服務(wù)器的認(rèn)證,保證交換信息的機(jī)密性和完整性。

SSL是位于可靠的面向連接的網(wǎng)絡(luò)層協(xié)議和應(yīng)用層協(xié)議之間的一種協(xié)議。SSL通過相互認(rèn)證、使用數(shù)字簽名保證完整性、使用加密確私密性,以實(shí)現(xiàn)客戶端和服務(wù)器之間的安全通訊。該協(xié)議由兩層組成:SSL加密協(xié)議和SSL握手協(xié)議。SSL的核心概念:加密算法,數(shù)字證書,CA。
TLS用于確保兩個(gè)通用程序之間提供保密性和數(shù)據(jù)完整性。該協(xié)議由兩層組成:TLS記錄協(xié)議和TLS握手協(xié)議(TLS是傳輸層加密協(xié)議,它的前身是SSL協(xié)議,如果沒有特殊要求,可以簡單理解為TLS和SSL都屬于同一協(xié)議)。

1.1 TLS、SSL加密算法

加密算法嚴(yán)格來說屬于編碼學(xué)(密碼編碼學(xué)),編碼是信息從一種形式或格式轉(zhuǎn)換為另一種形式的過程,解碼是編碼的逆過程(對應(yīng)密碼學(xué)中的解密)。加密算法主要分為兩類,對稱加密算法和非對稱加密算法。

  • 在對稱加密算法中,使用的密鑰只有一個(gè),發(fā)收信雙方都使用這一個(gè)密鑰進(jìn)行加密和解密,這就要求解密方事先知道加密密鑰。

  • 非對稱加密算法需要兩個(gè)密鑰,公開密鑰和私有密鑰,公開密鑰與私有密鑰是一對,如果用公開密鑰進(jìn)行數(shù)據(jù)加密,只有用對應(yīng)的私有密鑰才能解密,服務(wù)器端發(fā)送加密鎖給客戶端,公開密鑰需要定期更換。

身份認(rèn)證是建立每一個(gè)TLS連接不可或缺的部分,比如你有可能跟任何一方建立一個(gè)加密的通道,包括攻擊者,除非我們確保通信的,在開始加密通道之前。服務(wù)端是我們可以信任的,否則所有的加密(保密)工作都沒有任何作用,而身份認(rèn)證的方式就是通過證書以數(shù)字方式簽名的聲明,它將公鑰與持有相應(yīng)私鑰的主體(個(gè)人、設(shè)備或服務(wù))身份綁定在一起,通過在證書上簽名,CA可以核實(shí)與證書上公鑰相對應(yīng)的私鑰為證書所指定的主體所擁有??蛻舳撕头?wù)器首先必須建立連接和交換參數(shù),這個(gè)過程叫握手。

1.2 OpenSSL簽發(fā)證書

OpenSSL是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協(xié)議,并提供了豐富的應(yīng)用程序供測試或其他目的使用。通過在一定范圍內(nèi)部署一臺CA(Certificate Authority)服務(wù)器,可以實(shí)現(xiàn)局域網(wǎng)內(nèi)的證書認(rèn)證和授權(quán),保證數(shù)據(jù)傳輸?shù)陌踩裕部梢酝ㄟ^具體的部署實(shí)踐,了解國際上大型CA機(jī)構(gòu)的工作原理,為企業(yè)級的證書管理提供知識積累。

使用centos7簽發(fā)證書流程如下:

簽發(fā)CA根證書

1.生成CA密鑰對(密鑰對長度2048字節(jié))
openssl genrsa -out /usr/local/srv/ftp/cas/cakey.pem 2048 RSA

2.生成根證書簽發(fā)申請(證書訪問時(shí)已域名出現(xiàn))
openssl req -new -key /usr/local/srv/ftp/cas/cakey.pem -out /usr/local/srv/ftp/cas/cacert.csr -subj /CN=cas.com

3.根證書簽發(fā)
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey /usr/local/srv/ftp/cas/cakey.pem -in /usr/local/srv/ftp/cas/cacert.csr -out /usr/local/srv/ftp/cas/ca.cer

簽發(fā)服務(wù)器證書

1.生成服務(wù)器私鑰
openssl genrsa -aes256 -out /usr/local/srv/ftp/cas/server/server-key.pem 2048

2.生成服務(wù)器證書簽發(fā)申請
openssl req -new -key /usr/local/srv/ftp/cas/server/server-key.pem -out /usr/local/srv/ftp/cas/server/server.csr -subj /CN=cas.com

3.生成服務(wù)器證書
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA /usr/local/srv/ftp/cas/ca.cer -CAkey /usr/local/srv/ftp/cas/cakey.pem -CAserial /usr/local/srv/ftp/cas/server/ca.srl -CAcreateserial -in /usr/local/srv/ftp/cas/server/server.csr -out /usr/local/srv/ftp/cas/server/server.cer

簽發(fā)客戶端證書

1.生成客戶端私鑰
openssl genrsa -aes256 -out /usr/local/srv/ftp/cas/client/client-key.pem 2048

2.生成客戶端證書申請
openssl req -new -key /usr/local/srv/ftp/cas/client/client-key.pem -out /usr/local/srv/ftp/cas/client/client.csr -subj /CN=cas.com

3.生成客戶端簽發(fā)證書
openssl x509 -req -days 365 -sha1 -CA /usr/local/srv/ftp/cas/ca.cer -CAkey /usr/local/srv/ftp/cas/cakey.pem -CAserial /usr/local/srv/ftp/cas/server/ca.srl -in /usr/local/srv/ftp/cas/client/client.csr -out /usr/local/srv/ftp/cas/client/client.cer

生成Java證書(證書轉(zhuǎn)換)

1.生成客戶端證書
openssl pkcs12 -export -clcerts -name cas-client -inkey /usr/local/srv/ftp/cas/client/client-key.pem -in /usr/local/srv/ftp/cas/client/client.cer -out /usr/local/srv/ftp/cas/client/client.p12

2.生成服務(wù)器證書
openssl pkcs12 -export -clcerts -name cas-server -inkey /usr/local/srv/ftp/cas/server/server-key.pem -in /usr/local/srv/ftp/cas/server/server.cer -out /usr/local/srv/ftp/cas/server/server.p12

3.服務(wù)器證書導(dǎo)入本機(jī)受信任證書
keytool -importcert -trustcacerts -alias cas.com -file /usr/local/srv/ftp/cas/ca.cer -keystore /usr/local/tomcat/ca-trust.p12

4.查看所有證書信息
keytool -list -keystore /usr/local/srv/ftp/cas/client/client.p12 -storetype pkcs12 -v

二、SpringBoot配置Https

在Tomcat容器或是在SpringBoot項(xiàng)目中配置Https,一般都屬于單體應(yīng)用。實(shí)際上的分布式系統(tǒng)應(yīng)該在Nginx代理上實(shí)現(xiàn)Https證書的配置。

2.1 生成證書

keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore 

執(zhí)行上面的命令將會生成一個(gè)erver.keystore的證書文件,將此文件拷貝到資源目錄中。

2.2 修改配置

application.yml支持如下配置信息:

No.屬性名稱描述
1server.ssl.ciphers設(shè)置是否支持SSL Ciphers
2server.ssl.client-auth設(shè)置client-Authentica是Wanted還是Needed
3server.ssl.enabled設(shè)置是否開啟SSL
4server.ssl.key-alias設(shè)置keystore中key的別名
5server.ssl.key-password設(shè)置keystore中key的密碼
6server.ssl.key-store設(shè)置keyStore的路徑
7server.ssl.key-store-password設(shè)置訪問keyStore的密碼
8server.ssl.key-store-provider設(shè)置keyStore的提供者
9server.ssl.key-store-type設(shè)置keyStore類型
10server.ssl.protocol設(shè)置SSL協(xié)議類型,默認(rèn)為TLS
11server.ssl.trust-store設(shè)置持有SSL Certificates的Trust Store
12server.ssl.trust-store-password設(shè)置訪問Trust Store的密碼
13server.ssl.trust-store-provider設(shè)置Trust Store的提供者
14server.ssl.trust-store-type設(shè)置Trust Store的類型

修改application.yml文件:

server:
  port: 443 # https默認(rèn)訪問端口
  ssl:
    key-store: classpath:server.keystore # 證書存放的位置
    key-alias: tomcat # 證書別名
    key-store-type: JKS # P12證書格式
    key-store-password: 123456

編寫SpringBoot啟動類:

@Controller
@SpringBootApplication
public class StartSpringBoot {
    public static void main(String[] args) {
        SpringApplication.run(StartSpringBoot.class, args);
    }
    @ResponseBody
    @RequestMapping("/home")
    public String home() {
        return "<h1>hello springboot !!! </h1>";
    }
}

啟動項(xiàng)目,發(fā)現(xiàn)Tomcat在443端口進(jìn)行了啟動:

訪問https://localhost/home :

2.3 配置轉(zhuǎn)換器

既然已經(jīng)配置了https訪問,那么原來使用http協(xié)議進(jìn)行訪問的路徑也應(yīng)該重定向到https路徑下,這里僅以tomcat為例,新建配置類:

@Configuration
public class HttpConnectorConfig {
    /**
     * 獲取Http連接器
     * @return Connector
     */
    public Connector getHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http"); // 使用http協(xié)議
        connector.setSecure(false); // 非安全傳輸
        connector.setPort(80); // HTTP監(jiān)聽端口
        connector.setRedirectPort(443); // 重定向端口
        return connector;
    }
    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL"); // 設(shè)置約束
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*"); // 所有的路徑全部進(jìn)行重定向處理
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(getHttpConnector()); // 添加連接器
        return tomcat;
    }
}

重新啟動項(xiàng)目,發(fā)現(xiàn)項(xiàng)目同時(shí)監(jiān)聽了80和443端口。

訪問:http://localhost/home 發(fā)現(xiàn)自動跳轉(zhuǎn)為https訪問。

到此這篇關(guān)于SpringBoot配置Https訪問的文章就介紹到這了,更多相關(guān)SpringBoot配置Https訪問內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java數(shù)字轉(zhuǎn)中文大寫工具類詳細(xì)代碼(拿去即用)

    Java數(shù)字轉(zhuǎn)中文大寫工具類詳細(xì)代碼(拿去即用)

    最近項(xiàng)目中用到金額轉(zhuǎn)大寫的地方,索性給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Java數(shù)字轉(zhuǎn)中文大寫工具類的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-05-05
  • profiles.active多環(huán)境開發(fā)、測試、部署過程

    profiles.active多環(huán)境開發(fā)、測試、部署過程

    這篇文章主要介紹了profiles.active多環(huán)境開發(fā)、測試、部署,主要講如何使用profiles.active這個(gè)變量,讓我們在開發(fā)過程快速切換環(huán)境配置,以及如何使一個(gè)部署適配各種不同的環(huán)境,需要的朋友可以參考下
    2023-03-03
  • java8 統(tǒng)計(jì)字符串字母個(gè)數(shù)的幾種方法總結(jié)(推薦)

    java8 統(tǒng)計(jì)字符串字母個(gè)數(shù)的幾種方法總結(jié)(推薦)

    下面小編就為大家分享一篇java8 統(tǒng)計(jì)字符串字母個(gè)數(shù)的幾種方法總結(jié)(推薦),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來吧
    2017-11-11
  • 全面匯總SpringBoot和SpringClould常用注解

    全面匯總SpringBoot和SpringClould常用注解

    Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說明、配置的功能,這篇文章就帶你來了解一下
    2021-08-08
  • Java?WebService開源框架CXF詳解

    Java?WebService開源框架CXF詳解

    本文詳細(xì)講解了Java?WebService開源框架CXF,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • JAVA注解相關(guān)知識總結(jié)

    JAVA注解相關(guān)知識總結(jié)

    這篇文章主要介紹了JAVA注解相關(guān)知識,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • JDK多版本共存并自由切換的操作指南(本文為JDK8和JDK17)

    JDK多版本共存并自由切換的操作指南(本文為JDK8和JDK17)

    本文介紹了如何在Windows系統(tǒng)上配置多版本JDK(以JDK8和JDK17為例),并通過圖文結(jié)合的方式給大家講解了詳細(xì)步驟,具有一定的參考價(jià)值,需要的朋友可以參考下
    2025-03-03
  • Java實(shí)現(xiàn)在線聊天功能

    Java實(shí)現(xiàn)在線聊天功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)在線聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒

    基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒

    這篇文章主要介紹了基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java中的內(nèi)存泄漏

    Java中的內(nèi)存泄漏

    這篇文章主要介紹了Java中的內(nèi)存泄漏的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-11-11

最新評論

怀集县| 石门县| 时尚| 乌鲁木齐县| 黄大仙区| 东阳市| 枣庄市| 双牌县| 开阳县| 南召县| 商水县| 辉县市| 深圳市| 武宁县| 乐清市| 鸡泽县| 开江县| 武隆县| 临海市| 哈巴河县| 鹿泉市| 吴忠市| 黔江区| 岳阳市| 大洼县| 泸溪县| 格尔木市| 南岸区| 德庆县| 斗六市| 榕江县| 伊春市| 资中县| 浮山县| 安庆市| 中西区| 盖州市| 德州市| 云南省| 彭阳县| 沁水县|