综合精品一区_超碰激情在线_a在线播放不卡_暖暖在线中文免费日本_成人免费毛片app_精品三级久久_欧美天堂在线观看_blacked蜜桃精品一区_涩涩视频免费网站_在线亚洲伦理

全球微頭條丨https 原理分析進階-模擬https通信過程
2023-06-28 14:23:51 來源:

大家好,我是藍胖子,之前出過一篇https的原理分析 ,完整的介紹了https概念以及通信過程,今天我們就來比較完整的模擬實現https通信的過程,通過這篇文章,你能了解到https核心的概念以及原理,https證書是如何申請的,以及如何用golang實現https通信,https雙向認證。

本章代碼已經上傳到github


(資料圖片僅供參考)

https://github.com/HobbyBear/codelearning/tree/master/httpsdemo
https原理回顧

在開始之前,讓我們來了解下https相關的核心知識,可以作為上篇https原理分析的補充。學習一個東西一定要先知道為什么要用它,我總結了兩點:

1,https 第一個好處是使原本的http明文傳輸變成了密文傳輸,增加了安全性。

2,https第二好處是采用數字證書來解決了身份認證問題,起碼對端通信是經過ca認證的。

那么https又是通過什么技術來實現上述兩點的呢?

數字證書原理

我先聊聊數字證書的實現原理,在https的握手階段,服務端會發送自身的證書給客戶端,客戶端會去驗證這個證書的有效性,有效性是這樣保證的:

數字證書上會寫明證書的簽名算法和證書的簽名,如下圖所示

證書經過簽名算法中指定的SHA-256算法將證書內容進行hash得到消息摘要,然后再將這個摘要值經過RSA算法用證書頒發機構的私鑰進行加密就得到了證書的簽名。

而客戶端拿到這個證書就會用證書頒發機構的公鑰去解密簽名,然后按SHA-256算法也對證書內容進行hash,也得到一個消息摘要值,客戶端就去比對自己計算的消息摘要和公鑰解密簽名得到的消息摘要是否一致,一致則說明證書未被篡改并且是證書頒發機構頒發的。

有同學可能會疑惑,證書頒發機構的公鑰是從哪里獲取的,證書頒發機構的公鑰就在頒發機構其自身的證書里,如下圖所示。

https密文加密原理

知道了數字證書的驗證原理,我們來看看https通信中涉及到的加密過程,在https的握手階段,服務端會選擇一個與客戶端都支持的密鑰套件用于后續的加密,密鑰套件一般會有如下組件:

密鑰交換算法:用于在客戶端和服務器之間安全地交換加密密鑰。常見的密鑰交換算法有RSA和Diffie-Hellman等。

對稱加密算法:用于對通信數據進行加密和解密。常見的對稱加密算法有AES、DES和3DES等。

摘要算法:用于生成和驗證消息的完整性。常見的摘要算法有MD5和SHA-256等。

https采用非對稱加密的方式交換密鑰,然后使用對稱加密的方式對數據進行加密,并且對消息的內容采用摘要算法得到消息摘要,這樣對端在解密數據后可以通過相同的消息摘要算法對計算后的消息摘要和傳過來的消息摘要進行對比,從而判斷數據是否經過篡改。

具體步驟如下:

客戶端向服務器發送一個初始的握手請求,該請求中包含了客戶端支持的密碼套件列表。服務器收到握手請求后,會從客戶端提供的密碼套件列表中選擇一個與自己支持的密碼套件相匹配的套件。服務器將選定的密碼套件信息返回給客戶端。客戶端收到服務器返回的密碼套件信息后,會選擇一個與服務器相匹配的密碼套件。客戶端生成一個隨機的對稱加密密鑰,并使用服務器的公鑰對該密鑰進行加密。客戶端將加密后的對稱加密密鑰發送給服務器。服務器使用自己的私鑰對接收到的加密的對稱加密密鑰進行解密。客戶端和服務器現在都擁有了相同的對稱加密密鑰,可以使用該密鑰進行加密和解密通信數據。客戶端和服務器使用對稱加密密鑰對通信數據進行加密和解密,并使用摘要算法對數據進行完整性驗證。

通過以上步驟,客戶端和服務器可以建立一個安全的HTTPS連接,并使用密碼套件來保護通信的安全性。

模擬證書頒發

接下來,我們就要開始實現下https的通信了,由于只是實驗,我們不會真正的去為我的服務器去申請一個數字證書,所以我們暫時在本地用openssl來模擬下證書頒發的邏輯。

模擬根認證ca機構

我們知道證書頒發的機構是ca,而ca根證書是默認信任的,一般內置在瀏覽器和操作系統里,所以首先來生成一個根證書,并且讓系統默認信任它。

先生成ca的私鑰

openssl genpkey -algorithm RSA -out ca_private.key 

然后生成ca的證書請求

openssl req -new -key ca_private.key -out ca_csr.csr

生成ca證書

openssl x509 -req -in ca_csr.csr -signkey ca_private.key -out ca_cert.crt

我用的是mac系統,所以我這里演示下mac系統如何添加證書信任,

打開鑰匙串應用-> 將證書拖進登錄那一欄 -> 右擊證書點擊顯示簡介-> 將信任那一欄改為始終信任

模擬ca機構向服務器頒發證書

生成 服務器自身的私鑰

openssl genpkey -algorithm RSA -out final_private.key

接著就是生成證書請求,和前面生成證書請求不同,因為目前主流瀏覽器都要求證書需要設置subjectAltName,如果沒有設置SAN會報證書錯誤。

所以我們要換種方式生成證書請求,首先創建一個文件,比如我創建一個san.txt的文件

[req]default_bits = 4096distinguished_name = req_distinguished_namereq_extensions = v3_req[req_distinguished_name]countryName = countrystateOrProvinceName = provincelocalityName = cityorganizationName = company name## 換成自己的域名commonName = lanpangzi.com  [v3_req]subjectAltName = @alt_names[alt_names]## 換成自己的域名DNS.1=*.lanpangzi.comDNS.2=*.lanpangzi2.com

到時候上述文件只需要更換為自己的域名即可。由于我的域名設置為了.lanpangzi.com 和.lanpangzi2.com,所以我還要改下本地的hosts文件。

## /etc/hosts127.0.0.1 www.lanpangzi2.com127.0.0.1       www.lanpangzi.com

接著生成服務器證書請求

openssl req -new -key final_private.key -out final_csr.csr -config san.txt -sha256

生成服務器證書

openssl x509 -req -days 365 -in final_csr.csr -CA ca_cert.crt -CAkey ca_private.key -set_serial 01 -out final_csr.crt -extfile san.txt -extensions v3_req
golang實現https服務驗證證書

經過了上述步驟后算是生成了一個由ca機構頒發的證書,然后我們用golang代碼實現一個https服務器。需要為https服務器傳入證書以及服務器自身的私鑰。

func main() {     http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {        fmt.Fprintf(w, "Hello, World!\n")     })     fmt.Println(http.ListenAndServeTLS(":443",        "./final_csr.crt",        "./final_private.key", nil))  }

接著實現下客戶端代碼

func main() {     client := &http.Client{Transport: tr}     resp, err := client.Get("https://www.lanpangzi.com")     if err != nil {        fmt.Println("Get error:", err)        return     }     defer resp.Body.Close()     body, err := ioutil.ReadAll(resp.Body)     fmt.Println(string(body))  }

啟動服務端和客戶端后能看到服務正常返回了。

/private/var/folders/yp/g914gkcd54qdm5d0qyc9ljm00000gn/T/GoLand/___go_build_codelearning_httpsdemo_clientHello, World!

說明證書配置已經成功,而客戶端驗證證書的邏輯已經在本文開始講解了。

golang實現https雙向認證

上述代碼只是實現了https的單向認證,即客戶端對服務端的域名進行認證,在某些情況下,服務端也需要檢驗客戶端是否合法,所以下面我們就來看下如何用golang實現雙向認證的。首先我們還是要用ca位客戶端頒發一個證書。

模擬ca機構向客戶端頒發證書

生成 服務器自身的私鑰

openssl genpkey -algorithm RSA -out client_private.key

創建一個san_client.txt的文件

[req]default_bits = 4096distinguished_name = req_distinguished_namereq_extensions = v3_req[req_distinguished_name]countryName = countrystateOrProvinceName = provincelocalityName = cityorganizationName = company name## 換成自己的域名commonName = lanpangziclient.com  [v3_req]subjectAltName = @alt_names[alt_names]## 換成自己的域名DNS.1=*.lanpangziclient.comDNS.2=*.lanpangziclient2.com

到時候上述文件只需要更換為自己的域名即可。由于我的域名設置為了.lanpangzi.com 和.lanpangzi2.com,所以我還要改下本地的hosts文件。

## /etc/hosts127.0.0.1 www.lanpangziclient2.com127.0.0.1       www.lanpangziclient.com

接著生成服務器證書請求

openssl req -new -key client_private.key -out client_csr.csr -config san_client.txt -sha256

生成服務器證書

openssl x509 -req -days 365 -in client_csr.csr -CA ca_cert.crt -CAkey ca_private.key -set_serial 01 -out client_csr.crt -extfile san_client.txt -extensions v3_req

服務端和客戶端需要做下改動,服務端默認不會去校驗客戶端身份,但是現在改成強制校驗

func main() {       s := &http.Server{        Addr: ":443",        Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {           fmt.Fprintf(w, "Hello, World!\n")        }),        TLSConfig: &tls.Config{           ClientAuth: tls.RequireAndVerifyClientCert,        },     }       fmt.Println(s.ListenAndServeTLS("./final_csr.crt",        "./final_private.key"))  }

客戶端代碼請求時需要帶上自己的證書

func main() {     cliCrt, err := tls.LoadX509KeyPair("./client_csr.crt", "./client_private.key")     if err != nil {        fmt.Println("Loadx509keypair err:", err)        return     }     tr := &http.Transport{        TLSClientConfig: &tls.Config{           Certificates: []tls.Certificate{cliCrt},        },     }     client := &http.Client{Transport: tr}     resp, err := client.Get("https://www.lanpangzi.com")     if err != nil {        fmt.Println("Get error:", err)        return     }     defer resp.Body.Close()     body, err := ioutil.ReadAll(resp.Body)     fmt.Println(string(body))  }

這樣就完成了一個https的雙向認證。

關鍵詞:
責任編輯:zN_2843
    久久久久久久久久久久久9999| 欧美一区二区在线看| 97精品国产aⅴ7777| 人妻久久久一区二区三区| 精品成人免费视频| 欧美少妇性xxxx| 亚洲欧美影音先锋| 久久久人成影片一区二区三区| av免费观看网| 嫩草影院一区二区三区| 欧美日韩一卡| 色噜噜夜夜夜综合网| 国产免费一区二区三区香蕉精| 精产国品一二三区| 欧美男体视频| 国产精品一区二区你懂的| 亚洲精品二三区| 资源网第一页久久久| 久久久久久久极品| 无码一区二区三区视频| 欧美日韩国产麻豆| 成人欧美在线视频| 亚洲精品理论片| 亚洲伊人影院| 国产精品毛片久久久久久| 欧美精品福利在线| 亚洲这里只有精品| 蜜臀国产一区| 国产成人日日夜夜| 中文字幕一精品亚洲无线一区| 欧美激情 国产精品| 在线免费观看日韩视频| 亚洲一区二区三区高清不卡| 欧美一区三区二区| 日韩影片在线播放| 日本在线播放视频| 亚洲性色视频| 69久久夜色精品国产69蝌蚪网| 国产98在线|日韩| 久草福利资源在线| 国产在视频线精品视频www666| 亚洲亚洲精品在线观看| 91精品久久久久久久久久久| 性高潮久久久久久久| 三级小说欧洲区亚洲区| 一区二区三区免费在线观看| 国产日韩精品综合网站| 亚洲色成人网站www永久四虎 | 视频直播国产精品| 精品中文字幕av| 隣の若妻さん波多野结衣| 国产精品亚洲第一区在线暖暖韩国| 原创国产精品91| 国产无套粉嫩白浆内谢的出处| 无码国产精品96久久久久| 丁香一区二区三区| 久久久在线免费观看| 在线观看一区二区三区视频| 亚洲乱码一区| 亚洲综合视频在线观看| 亚洲综合第一页| 欧美日韩在线视频免费| 国产精品videosex极品| 日韩精品专区在线影院重磅| 国产片侵犯亲女视频播放| 国产日韩免费视频| 国产成人午夜电影网| 欧美激情视频在线免费观看 欧美视频免费一 | 免费精品视频一区二区三区| 男女视频免费看| 麻豆精品网站| 中文亚洲视频在线| 伊人影院综合在线| 国产精品一区二区三区四区在线观看| 中文字幕一区在线观看| 亚洲影视九九影院在线观看| 久久久久久久久精| 1024精品一区二区三区| 日韩黄在线观看| 精品www久久久久奶水| 欧美影视资讯| 亚洲欧美激情一区二区| aa成人免费视频| 在线观看中文字幕视频| 日韩精品五月天| 精品国产一区二区三区四区在线观看 | 欧美又粗又长又爽做受| 少妇无码一区二区三区| 久久精品日产第一区二区三区高清版| 国产精品久久久久久久久久久不卡 | 日韩欧美在线网站| 妞干网在线视频观看| www.成人爱| 国产精品视频yy9299一区| 亚洲在线观看视频| 亚洲精品77777| 日韩成人免费电影| 精品自在线视频| www.超碰97| 欧美xxav| 亚洲国产精品久久精品怡红院| 一本久道中文无码字幕av| 国产精品久久免费视频| 精品久久久久久久久久ntr影视| 日本一区不卡| 亚洲精品久久久久久久久久| 日本一区二区三区免费乱视频| 国产美女精品视频| 久久精品无码人妻| 另类小说一区二区三区| 97精品国产aⅴ7777| 亚洲欧美另类日本| 亚洲综合精品四区| 欧美成人精品一区| 级毛片内射视频| 国语对白精品一区二区| 最新日韩中文字幕| 少妇精品一区二区| 午夜精品久久久久99热蜜桃导演| 亚洲欧洲在线免费| 亚洲图片欧美另类| 久久久久国产| 一区二区三区在线播放欧美| 黄色av网址在线观看| 亚洲午夜精品一区二区国产| 亚洲欧美日韩中文视频| 天天躁日日躁狠狠躁免费麻豆| 99精品在线观看| 亚洲色图17p| 男女一区二区三区| 欧美女人交a| 日韩中文娱乐网| 欧美大波大乳巨大乳| 亚洲精选一区| 国模视频一区二区| 九九在线观看视频| 蜜臀国产一区二区三区在线播放| 青青草一区二区| 日本最新中文字幕| 风流少妇一区二区| 亚洲综合中文字幕在线观看| 国产精品视频在线观看免费 | 精品国产乱码久久久| 亚洲国产精品va| 中文字幕永久免费| 黄色亚洲精品| 久久久亚洲精选| 激情综合网五月天| 国产中文字幕一区| 国产原创欧美精品| 91成人一区二区三区| 国产精品丝袜在线| 亚洲欧美丝袜| 亚洲色图综合| 欧美一区二区三区在线观看| www.色就是色.com| 久久久人成影片免费观看| 久久精品视频99| 日本一二三区在线观看| 国产一区高清在线| 亚洲japanese制服美女| 精品国产av 无码一区二区三区| 亚洲视频每日更新| 国产女主播av| 8848成人影院| 亚洲精品成人av| 三叶草欧洲码在线| 天堂资源在线中文精品| 国产精品狠色婷| 在线播放国产一区| 亚洲欧美另类综合偷拍| 久久在线中文字幕| 欧美色图五月天| 一本色道久久综合狠狠躁篇怎么玩| 超薄肉色丝袜一二三| 精品亚洲成a人在线观看| 亚洲xxxx在线| 日本免费网站在线观看| 日本乱人伦aⅴ精品| 亚洲 欧美 另类人妖| 欧美激情偷拍| 91高清免费在线观看| 久久久久久久久久成人| 亚洲婷婷在线视频| 青青青青在线视频| 九九在线精品| 久久精品国产亚洲| 伊人国产在线观看| 国产日产欧美一区二区视频| 99精品一级欧美片免费播放| 国产精品白浆| 中文字幕自拍vr一区二区三区| 国产av无码专区亚洲av毛网站| av男人天堂一区| 亚洲一区二区三区四区中文| caoporn成人免费视频在线| 亚洲欧美国产日韩天堂区| 成人欧美一区二区三区黑人一| 国产成人精品免费| 日韩亚洲视频在线| 国产区精品视频在线观看豆花| 夜夜嗨av一区二区三区四区| 国产亚洲欧美久久久久| 中文字幕二三区不卡| 免费人成在线观看视频播放| 国产一区二区欧美| 欧美激情视频一区二区| 中文字幕精品一区二区精| 亚洲成人第一页| 国产亚洲视频一区| 爽好久久久欧美精品| 操人视频欧美| 深夜日韩欧美| 亚洲精选在线观看| 九九视频免费观看| 亚洲欧美自拍偷拍| 成人免费无码av| 99热免费精品在线观看| 成人免费激情视频| 午夜精品久久久久久久久久蜜桃| 精品久久久久久综合日本欧美| 欧美丰满老妇熟乱xxxxyyy| 99久久国产综合精品麻豆| 三级在线免费观看| 婷婷综合久久| 国产精品户外野外| 欧美日韩精品免费观看视完整| 欧美精品一区二区三区蜜桃| 亚洲天堂黄色片| 1000精品久久久久久久久| www.日日操| 久久精品首页| 免费在线国产精品| 欧美黄色影院| 久久人人97超碰精品888 | 国产精品羞羞答答xxdd| 伊人av成人| 青青草91久久久久久久久| 欧美在线国产精品| 亚洲av毛片成人精品| 亚洲国产黄色片| 日韩免费一二三区| 亚洲一区在线播放| 无码国产精品久久一区免费| 国产美女视频一区| 亚洲天堂av免费在线观看| 日韩在线看片| 国产精品中文字幕在线| 黄色精品视频网站| 日韩在线激情视频| 国产一区二区三区黄片| 91精品蜜臀在线一区尤物| 国产成人久久久久| 亚洲精品国产一区二区精华液 | 精品人妻无码一区二区| 欧美一级午夜免费电影| 黄色香蕉视频在线观看| 亚洲免费电影在线| 女王人厕视频2ⅴk| youjizz久久| 亚洲熟妇av一区二区三区漫画| 国产亚洲福利| 欧美一区二区影视| 日韩激情图片| 91久久久久久久久久久| 日韩精品一级| 97视频在线观看网址| 欧美片第一页| www.午夜精品| 午夜精品在线播放| 精品一区二区电影| 做爰无遮挡三级| 91精品久久久久久久99蜜桃| 久久伊人成人网| 色婷婷久久久综合中文字幕 | 在线丨暗呦小u女国产精品| 亚洲视频一区在线播放| 欧美一级久久久| 欧美一级视频免费观看| 欧美专区日韩专区| 波多野结衣爱爱视频| 欧美日韩国内自拍| 亚洲一级理论片| 亚洲成人一区在线| 欧美 日韩 成人| 亚洲精品日产精品乱码不卡| 内射中出日韩无国产剧情| 国产精品人人做人人爽人人添| 国产精品99精品无码视亚| 久久久一区二区三区| 国产美女18xxxx免费视频| 成人91在线观看| 亚洲最大综合网| 成人亚洲一区二区一| 老司机午夜av| 福利91精品一区二区三区| 四虎永久在线精品无码视频| 国产精品自拍网站| 91淫黄看大片| www.欧美.com| 天天久久综合网| 久久亚洲精品小早川怜子| japan高清日本乱xxxxx| 国产日韩成人精品| 五月天丁香社区| 自拍偷拍亚洲激情| 日本少妇色视频| 亚洲精品一二三区| 欧美日韩高清丝袜| 亚欧色一区w666天堂| 老熟妻内射精品一区| 日本高清不卡aⅴ免费网站| 久久无码精品丰满人妻| 欧美日本在线视频| 亚洲天堂视频网站| 精品黑人一区二区三区久久| 一级特黄aa大片| 亚洲小视频在线观看| 高潮一区二区三区乱码| 久久久国产精品免费| 蜜桃视频成人m3u8| 国产91成人在在线播放| 综合中文字幕| 91亚洲精品久久久久久久久久久久| 欧美色图激情小说| 久久免费看av| 99热这里只有精品8| 国内少妇毛片视频| 大白屁股一区二区视频| 一级淫片在线观看| 中文文精品字幕一区二区| 日韩乱码人妻无码中文字幕久久| 亚洲动漫第一页| 久久久久无码国产精品| 日韩一区二区三区在线观看| 一个人看的www日本高清视频| 在线观看亚洲区| 成人18视频在线观看| 国产精品成人v| 欧美综合一区| 视频一区免费观看| 日本亚洲一区二区| 手机看片福利日韩| 欧美国产欧美综合| 免费看污片的网站| 日本道免费精品一区二区三区| 日韩中文字幕在线观看视频| 精品亚洲永久免费精品| 久久人体大尺度| 国产v综合v亚洲欧美久久| 亚洲系列另类av| 品久久久久久久久久96高清| 日本va欧美va瓶| 少妇一级淫免费放| 中文字幕在线播放不卡一区| 青花影视在线观看免费高清| 欧美一级视频精品观看| 性一交一乱一透一a级| 久久久久久久亚洲精品| 日韩有码av| 日韩欧美在线电影| 捆绑紧缚一区二区三区视频| 99九九精品视频| 亚洲一区二区三区四区的| 国产精品第九页| 日韩电影在线观看中文字幕 | 欧美高清在线视频| 黄色av片三级三级三级免费看| 337p亚洲精品色噜噜噜| 亚洲精品97久久中文字幕无码 | 日韩在线电影| 亚洲一区久久久| 在线午夜精品| 黄色成人免费看| 亚洲精品国产a| 日韩黄色精品视频| 一本色道久久88精品综合| 国产一区二区三区国产精品| 国产精品美女久久久久av福利| 欧美亚洲在线| 日本高清一区二区视频| 性做久久久久久久久| 国产精品xxxxxx| 久精品免费视频| 国产aⅴ精品一区二区三区久久| 亚洲欧洲久久| 成人黄色av电影| 毛片久久久久久| 亚洲丁香婷深爱综合| 日本成人福利| 国产精品久久精品国产| 日韩在线一二三区| 26uuu国产| 欧美性感一区二区三区| 丰满肉肉bbwwbbww| 国产精品国产三级国产专播精品人 | 日韩美女一区| 成人a区在线观看| 麻豆视频免费在线播放| 亚洲国产中文字幕久久网|