日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

TLS,SSL,HTTPS with Python(转)

發(fā)布時(shí)間:2025/3/14 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TLS,SSL,HTTPS with Python(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

From:?掃盲 HTTPS 和 SSL/TLS 協(xié)議[0]:引子

需要了解的背景知識(shí):

  • 術(shù)語(yǔ) HTTPS,SSL,TLS
  • 長(zhǎng)連接與短連接的關(guān)系
  • 了解 CA 證書(shū)
  • 基本流程

一.術(shù)語(yǔ)掃盲

1.什么是SSL?

SSL(Secure Sockets Layer, 安全套接字),因?yàn)樵然ヂ?lián)網(wǎng)上使用的 HTTP 協(xié)議是明文的,存在很多缺點(diǎn)——比如傳輸內(nèi)容會(huì)被偷窺(嗅探)和篡改。發(fā)明 SSL 協(xié)議,就是為了解決這些問(wèn)題。

2.那么什么是TLS呢?

到了1999年,SSL 因?yàn)閼?yīng)用廣泛,已經(jīng)成為互聯(lián)網(wǎng)上的事實(shí)標(biāo)準(zhǔn)。IETF 就在那年把 SSL 標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化之后的名稱(chēng)改為 TLS(是“Transport Layer Security”的縮寫(xiě)),中文叫做“傳輸層安全協(xié)議”。

很多相關(guān)的文章都把這兩者并列稱(chēng)呼(SSL/TLS),因?yàn)檫@兩者可以視作同一個(gè)東西的不同階段。

3.那么什么是HTTPS呢?

HTTPS = HTTP + SSL/TLS, 也就是 HTTP over SSL 或 HTTP over TLS.這是后面加?S?的由來(lái)?

相對(duì)于HTTP:

  • http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
  • http的連接很簡(jiǎn)單,是無(wú)狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。

二.長(zhǎng)連接VS短連接

HTTP對(duì)TCP的連接使用分為:

  • 短連接
  • 長(zhǎng)連接(又稱(chēng)“持久連接”,或“Keep-Alive”或“Persistent Connection”)

如果是短連接的話,針對(duì)每個(gè)HTML資源,就會(huì)針對(duì)每一個(gè)外部資源,分別發(fā)起一個(gè)個(gè) TCP 連接。相反,如果是“長(zhǎng)連接”的方式,瀏覽器也會(huì)先發(fā)起一個(gè) TCP 連接去抓取頁(yè)面。但是抓取頁(yè)面之后,該 TCP 連接并不會(huì)立即關(guān)閉,而是暫時(shí)先保持著(所謂的“Keep-Alive”)。然后瀏覽器分析 HTML 源碼之后,發(fā)現(xiàn)有很多外部資源,就用剛才那個(gè) TCP 連接去抓取此頁(yè)面的外部資源。

注意:

  • 在 HTTP 1.0 版本,【默認(rèn)】使用的是“短連接”(那時(shí)候是 Web 誕生初期,網(wǎng)頁(yè)相對(duì)簡(jiǎn)單,“短連接”的問(wèn)題不大)
  • 在 HTTP 1.1 中,【默認(rèn)】采用的是“Keep-Alive”的方式。

三.HTTPS的設(shè)計(jì)

HTTPS的設(shè)計(jì)要兼容HTTP

  • HTTPS 還是要基于 TCP 來(lái)傳輸
  • 單獨(dú)使用一個(gè)新的協(xié)議,把 HTTP 協(xié)議包裹起來(lái)(所謂的“HTTP over SSL”,實(shí)際上是在原有的 HTTP 數(shù)據(jù)外面加了一層 SSL 的封裝。HTTP 協(xié)議原有的 GET、POST 之類(lèi)的機(jī)制,基本上原封不動(dòng))

關(guān)于HTTPS的性能,為了確保性能,SSL 的設(shè)計(jì)者至少要考慮如下幾點(diǎn):

  • 如何選擇加密算法(“對(duì)稱(chēng)”or“非對(duì)稱(chēng)”)?
  • 如何兼顧 HTTP 采用的“短連接”TCP 方式?

四.簡(jiǎn)單運(yùn)行過(guò)程

SSL/TLS協(xié)議的基本思路是采用公鑰加密法,也就是說(shuō),客戶(hù)端先向服務(wù)器端索要公鑰,然后用公鑰加密信息,服務(wù)器收到密文后,用自己的私鑰解密。

問(wèn)題:

  • 如何保證公鑰不被篡改?:解決方法:將公鑰放在數(shù)字證書(shū)中。只要證書(shū)是可信的,公鑰就是可信的。
  • 公鑰加密計(jì)算量太大,如何減少耗用的時(shí)間?解決方法:每一次對(duì)話(session),客戶(hù)端和服務(wù)器端都生成一個(gè)”對(duì)話密鑰”(session key),用它來(lái)加密信息。由于”對(duì)話密鑰”是對(duì)稱(chēng)加密,所以運(yùn)算速度非常快,而服務(wù)器公鑰只用于加密”對(duì)話密鑰”本身,這樣就減少了加密運(yùn)算的消耗時(shí)間。

因此,SSL/TLS協(xié)議的基本過(guò)程是這樣的:

  • 客戶(hù)端向服務(wù)器端索要并驗(yàn)證公鑰。
  • 雙方協(xié)商生成”對(duì)話密鑰”。
  • 雙方采用”對(duì)話密鑰”進(jìn)行加密通信。

如下圖解:

五.詳解運(yùn)行過(guò)程

如下圖示:

注意的是,”握手階段”的所有通信都是明文的

1.客戶(hù)端發(fā)出請(qǐng)求(ClientHello)

C向S提供信息如下:

  • 支持的協(xié)議版本,比如TLS 1.0版。
  • 一個(gè)客戶(hù)端生成的隨機(jī)數(shù),稍后用于生成”對(duì)話密鑰”。
  • 支持的加密方法,比如RSA公鑰加密。
  • 支持的壓縮方法。

2.服務(wù)器回應(yīng)(SeverHello)

服務(wù)器收到客戶(hù)端請(qǐng)求后,向客戶(hù)端發(fā)出回應(yīng),這叫做SeverHello。服務(wù)器的回應(yīng)包含以下內(nèi)容。

  • 確認(rèn)使用的加密通信協(xié)議版本,比如TLS 1.0版本。如果瀏覽器與服務(wù)器支持的版本不一致,服務(wù)器關(guān)閉加密通信。
  • 一個(gè)服務(wù)器生成的隨機(jī)數(shù),稍后用于生成”對(duì)話密鑰”。
  • 確認(rèn)使用的加密方法,比如RSA公鑰加密。
  • 服務(wù)器證書(shū)。

除了上面這些信息,如果服務(wù)器需要確認(rèn)客戶(hù)端的身份,就會(huì)再包含一項(xiàng)請(qǐng)求,要求客戶(hù)端提供”客戶(hù)端證書(shū)”。

3.客戶(hù)端回應(yīng)

客戶(hù)端收到服務(wù)器回應(yīng)以后,首先驗(yàn)證服務(wù)器證書(shū)。如果證書(shū)不是可信機(jī)構(gòu)頒布、或者證書(shū)中的域名與實(shí)際域名不一致、或者證書(shū)已經(jīng)過(guò)期,就會(huì)向訪問(wèn)者顯示一個(gè)警告,由其選擇是否還要繼續(xù)通信。

如果證書(shū)沒(méi)有問(wèn)題,客戶(hù)端就會(huì)從證書(shū)中取出服務(wù)器的公鑰。然后,向服務(wù)器發(fā)送下面三項(xiàng)信息。

  • 一個(gè)隨機(jī)數(shù)。該隨機(jī)數(shù)用服務(wù)器公鑰加密,防止被竊聽(tīng)。
  • 編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送。
  • 客戶(hù)端握手結(jié)束通知,表示客戶(hù)端的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值,用來(lái)供服務(wù)器校驗(yàn)。

現(xiàn)在總共有3個(gè)隨機(jī)數(shù),第三個(gè)又稱(chēng)”pre-master key”,有了它以后,客戶(hù)端和服務(wù)器就同時(shí)有了三個(gè)隨機(jī)數(shù),接著雙方就用事先商定的加密方法,各自 生成 本次會(huì)話 所用的 同一把 “會(huì)話密鑰”。

4.服務(wù)器的最后回應(yīng)

服務(wù)器收到客戶(hù)端的第三個(gè)隨機(jī)數(shù)pre-master key之后,計(jì)算生成本次會(huì)話所用的”會(huì)話密鑰”。然后,向客戶(hù)端最后發(fā)送下面信息。

  • 編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送。
  • 服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)也是前面發(fā)送的所有內(nèi)容的hash值,用來(lái)供客戶(hù)端校驗(yàn)。

至此,整個(gè)握手階段全部結(jié)束。接下來(lái),客戶(hù)端與服務(wù)器進(jìn)入加密通信,就完全是使用普通的HTTP協(xié)議,只不過(guò)用”會(huì)話密鑰”加密內(nèi)容。

六.Https的劣勢(shì)

不完整總結(jié)如下:

  • 對(duì)數(shù)據(jù)進(jìn)行加解密決定了它比http慢
  • https協(xié)議需要到CA申請(qǐng)證書(shū)。

七.Python操作SSL

首先創(chuàng)建證書(shū)

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem

實(shí)例代碼在:?ssl_demo

八.參考:

  • 聊聊HTTPS和SSL/TLS協(xié)議
  • 圖解HTTPS
  • SSL/TLS協(xié)議運(yùn)行機(jī)制的概述

轉(zhuǎn)載于:https://www.cnblogs.com/xiaoerlang/p/7783635.html

總結(jié)

以上是生活随笔為你收集整理的TLS,SSL,HTTPS with Python(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。