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

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

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

一、Https協(xié)議

  • HTTP(Hypertext transfer protocal)是一種詳細(xì)規(guī)定了瀏覽器和萬(wàn)維網(wǎng)服務(wù)器之間相互通信的規(guī)則,通過(guò)因特網(wǎng)傳送萬(wàn)維網(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申請(qǐng)證書(一般免費(fèi)的證書很少)。
  • http是超文本傳輸協(xié)議,信息是明文傳輸?shù)模╤ttp協(xié)議是不安全的,黑客可以在用戶和服務(wù)器之間設(shè)置攔截器竊取傳輸?shù)膬?nèi)容。也可以偽造用戶提交的表單向服務(wù)器發(fā)出請(qǐng)求,從而獲取到服務(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ā)的主要目的,是提供對(duì)網(wǎng)絡(luò)服務(wù)器的認(rèn)證,保證交換信息的機(jī)密性和完整性。

SSL是位于可靠的面向連接的網(wǎng)絡(luò)層協(xié)議和應(yīng)用層協(xié)議之間的一種協(xié)議。SSL通過(guò)相互認(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é)議,如果沒(méi)有特殊要求,可以簡(jiǎn)單理解為TLS和SSL都屬于同一協(xié)議)。

1.1 TLS、SSL加密算法

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

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

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

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

1.2 OpenSSL簽發(fā)證書

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

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

簽發(fā)CA根證書

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

2.生成根證書簽發(fā)申請(qǐng)(證書訪問(wèn)時(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ā)申請(qǐng)
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.生成客戶端證書申請(qǐng)
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í)行上面的命令將會(huì)生成一個(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è)置訪問(wèn)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è)置訪問(wèn)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)訪問(wèn)端口
  ssl:
    key-store: classpath:server.keystore # 證書存放的位置
    key-alias: tomcat # 證書別名
    key-store-type: JKS # P12證書格式
    key-store-password: 123456

編寫SpringBoot啟動(dòng)類:

@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>";
    }
}

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

訪問(wèn)https://localhost/home :

2.3 配置轉(zhuǎn)換器

既然已經(jīng)配置了https訪問(wèn),那么原來(lái)使用http協(xié)議進(jìn)行訪問(wè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;
    }
}

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

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

到此這篇關(guān)于SpringBoot配置Https訪問(wèn)的文章就介紹到這了,更多相關(guān)SpringBoot配置Https訪問(wèn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(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ā)、測(cè)試、部署過(guò)程

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

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

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

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

    全面匯總SpringBoot和SpringClould常用注解

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

    Java?WebService開源框架CXF詳解

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

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

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

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

    本文介紹了如何在Windows系統(tǒng)上配置多版本JDK(以JDK8和JDK17為例),并通過(guò)圖文結(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è)微信提醒,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(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

最新評(píng)論

青田县| 云林县| 武邑县| 酉阳| 唐海县| 泾川县| 胶州市| 伊宁市| 安陆市| 博客| 喀什市| 康马县| 黄浦区| 巴彦县| 扬中市| 淳化县| 扎兰屯市| 徐汇区| 宁德市| 云南省| 清远市| 嘉荫县| 盐源县| 吉木萨尔县| 分宜县| 陇南市| 府谷县| 寿阳县| 巴林左旗| 晋江市| 贞丰县| 灵山县| 东莞市| 婺源县| 阳信县| 靖宇县| 鸡泽县| 新乡市| 璧山县| 武乡县| 怀安县|