国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

HTTPS那些協議:TLS, SSL, SNI, ALPN, NPN

網絡 通信技術
如今 HTTPS 已經普遍應用了,在帶來安全性的同時也確實給 Web 引入了更多復雜的概念。這其中就包括一系列從沒見過的網絡協議。現在 Harttle 從 HTTPS 的原理出發,嘗試以最通俗的方式來解讀 HTTPS 涉及的這些協議。

如今 HTTPS 已經普遍應用了,在帶來安全性的同時也確實給 Web 引入了更多復雜的概念。這其中就包括一系列從沒見過的網絡協議。現在 Harttle 從 HTTPS 的原理出發,嘗試以最通俗的方式來解讀 HTTPS 涉及的這些協議。

HTTPS 概要

HTTPS 是建立在安全通信之上的 HTTP,使用傳輸層加密(TLS 或 SSL)的手段。其目的是保護用戶隱私(比如防止經過的網絡節點截獲 HTTP 內容)和數據完整性(比如運營商強插廣告),就是端到端加密來防止中間人攻擊。

TLS/SSL 是在傳輸層之上應用層之下的協議,因此 HTTP 協議的內容不受影響。這些加密采用非對稱加密算法因此需要一個官方來發布公鑰,這就是 密鑰基礎設施(CA)。因此各瀏覽器會內置一些 CA 的根證書,這些 CA 可以進一步授權其他的域名,這樣你的瀏覽器就可以對正在訪問的域名進行身份認證。

如果你要自己的服務也支持 HTTPS 去 CA 注冊自己的域名就可以了。有一些免費的 CA 比如 GoDaddy, Let’s Encrypt, CloudFlare 等可以選擇。

HTTPS 交互示例

以下 Wireshark 日志記錄了一個發往 https://github.com/harttle 的 GET 請求,可以看到主要的幾個協議的交互過程:

  • TCP。前三行完成一對 SYN/ACK(即俗稱的三次握手),至此 TCP 連接已經成功建立。
  • TLS。4-5 行開始了 TLS 握手,建立這個加密層。
  • TLS 有眾多擴展協議比如 SNI,NPN,ALPN 等(見下文),就發生在 TLS 的 ClientHello 和 ServerHello 階段。

 

tcp dump

TLS/SSL

TLS 的前身是 SSL,TCP/IP 協議棧中運行在 TCP 之上,用來交換密鑰并形成一個加密層(Record Layer)。 TLS 是 HTTPS 的核心協議,HTTPS 交互與 HTTP 交互的主要區別就在這一層:

 

tls

開始傳輸密文前需要進行互換密鑰、驗證服務器證書等準備工作,因此 TLS 也存在握手階段,主要步驟為:客戶端發送 ClientHello,服務器發送 ServerHello,服務器繼續發送 Certificate,然后互相發送 KeyExchange 消息,最后發送 ChangeCipherSpec 來通知對方后續都是密文。具體交互和協議字段請參考 RFC 5246(TLSv1.2)和 RFC 6176(TLSv2.0)。

TLS 作為 TCP/IP 協議棧中的加密協議有廣泛的用途,為支持通用機制的協議擴展,定義了 RFC 4366 - TLS Extensions。 TLS 先后被郵件服務、Web 服務、FTP 等采用,這里有一個 擴展協議列表。

本文關注其中 Web 服務(HTTPS)相關的擴展,如 SNI, NPN, ALPN。這些協議通過擴展 TLS 的 ClientHello/ServerHello 消息為 TLS 增加新的功能。為此我們先看一下 ClientHello 消息的結構(ServerHello 類似):

 

  1. struct { 
  2.     ProtocolVersion client_version; 
  3.     Random random; 
  4.     SessionID session_id; 
  5.     CipherSuite cipher_suites<2..2^16-2>; 
  6.     CompressionMethod compression_methods<1..2^8-1>; 
  7.     select (extensions_present) { 
  8.         case false
  9.             struct {}; 
  10.         case true
  11.             Extension extensions<0..2^16-1>; 
  12.     }; 
  13. } ClientHello; 

注意最后一個字段,最多可以有 65536 個 Extension,其中 Extension 定義為一個兩字節的 ExtensionType 以及對應的不透明數據。下文的 SNI,NPN,ALPN 都是其中之一。

SNI

SNI(Server Name Indication)指定了 TLS 握手時要連接的 主機名。 SNI 協議是為了支持同一個 IP(和端口)支持多個域名。

因為在 TLS 握手期間服務器需要發送證書(Certificate)給客戶端,為此需要知道客戶請求的域名(因為不同域名的證書可能是不一樣的)。這時有同學要問了,要連接的主機名不就是發起 HTTP 時的 Host 么!這是對 HTTPS 機制的誤解,TLS Handshake 發生時 HTTP 交互還沒開始,自然 HTTP 頭部還沒到達服務器。SNI 協議就定義在 RFC 6066 中:

 

  1. struct { 
  2.     NameType name_type; 
  3.     select (name_type) { 
  4.         case host_name: HostName; 
  5.     } name
  6. } ServerName; 
  7.  
  8. enum { 
  9.     host_name(0), (255) 
  10. } NameType; 
  11.  
  12. opaque HostName<1..2^16-1>; 
  13. struct { 
  14.     ServerName server_name_list<1..2^16-1> 
  15. } ServerNameList; 

我們看本文剛開始的例子,第4行發往 github.com 的 ClientHello 中的 SNI Extension 字段:

 

  1. Extension Header     ||            Extension Payload (SNI) 
  2. --------------------------------------------------------------------------------------------------- 
  3. ExtensionType Length || PayloadLength Type      ServerLength ServerName 
  4. --------------------------------------------------------------------------------------------------- 
  5. 00 00         00 0f  00 0d            00        00 0a        67 69 74 68 75 62 2e 63 6f 6d 
  6. sni(0)        15     || 13            host_name 10           github.com 

ALPN/NPN

ALPN(Application-Layer Protocol Negotiation)也是 TLS 層的擴展,用于協商應用層使用的協議。它的前身是 NPN,最初用于支持 Google SPDY 協議(現已標準化為 HTTP/2)。 TLS 客戶端和服務器版本的問題,導致 SPDY->HTTP/2 和 NPN -> ALPN 的切換過程引發了不少陣痛:

  • The day Google Chrome disables HTTP/2
  • 從啟用 HTTP/2 導致網站無法訪問說起

因此 以標準先行的方式來推進 Web 基礎設施 已成為今日 Web 平臺的共識。這里我們不提那些仍然在進行作坊式生產的(類)瀏覽器廠商,任何阻擋 Web 平臺發展的實現(甚至標準,試看 XHTML, OSI…)遲早會被淘汰。

言歸正傳,ALPN 定義在 RFC 7301 - Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension,

 

  1. enum { 
  2.     application_layer_protocol_negotiation(16), (65535) 
  3. } ExtensionType; 
  4.  
  5. opaque ProtocolName<1..2^8-1>; 
  6.  
  7. struct { 
  8.     ProtocolName protocol_name_list<2..2^16-1> 
  9. } ProtocolNameList; 

我們看本文剛開始的例子,第4行發往 github.com 的 ClientHello 中的 ALPN Extension 字段:

 

  1. Extension Header     ||            Extention Payload (ALPN) 
  2. --------------------------------------------------------------------------------------------------- 
  3. ExtensionType Length || PayloadLength StringLength Protocol StringLength Protocol 
  4. --------------------------------------------------------------------------------------------------- 
  5. 00 10         00 0e  00 0c            02           68 32    08           68 74 74 70 2f 31 2e 31 
  6. alpn(16)      14     || 12            2            h2       8            http/1.1 

Extention 的消息體包含多個字符串(protocol_name_list),表示客戶端支持的所有應用層協議。上面的例子中有 h2 和 http/1.1 兩個,支持 SPDY 的客戶端這里會多一個 spdy/2。服務器給出的 ServerHello 中需要選擇其中之一,本文的例子中 ServerHello 的 ALPN 字段為:

 

  1. 00 10 00 0b 00 09 08 68 74 74 70 2f 31 2e 31 
  2.                      h  t  t  p  /  1  .  1 

這樣 Server 和 Client 就利用 ALPN 協議達成了共識,將會在握手結束后使用 HTTP/1.1 協議進行通信。

參考和致謝

從 HTTPS 的關鍵一層 TLS 開始,介紹了一個典型的 HTTPS 交互過程。結合抓包給出的字節序列,依次介紹了 TLS、SNI、ALPN 等協議原理和主要內容。

責任編輯:未麗燕 來源: harttle.land
相關推薦

2015-05-13 09:45:13

2022-03-05 18:25:51

SSLTLS協議

2022-01-06 10:23:49

HTTPS協議數據

2022-05-25 09:52:36

車聯網通信安全SSL/TLS

2010-07-30 16:02:56

2009-11-06 13:34:53

2011-03-08 14:14:31

Proftpd

2015-05-20 16:53:49

網絡·安全技術周刊

2016-10-31 10:25:24

2013-03-26 10:03:20

2019-08-20 14:01:22

HTTPSSSL協議

2023-09-22 17:36:37

2021-03-08 00:26:12

SSLTLS網絡協議

2019-03-11 08:19:39

SSLTLS服務器

2018-01-08 15:13:15

httphttpsSSL證書

2010-12-16 13:59:52

OpenSSL

2024-03-26 12:08:20

加密NginxHTTP

2011-03-04 09:30:56

PureFTPdTLS防火墻

2019-02-18 14:18:04

2019-08-22 10:35:10

SSL協議安全
點贊
收藏

51CTO技術棧公眾號

亚洲欧美日韩国产成人精品影院| 亚洲国产最新| 91丨porny丨最新| 成人精品久久一区二区三区| 视频在线这里都是精品| 91麻豆国产自产在线观看| 国产精品久久九九| 欧美一级大片在线视频| 91麻豆精品国产91久久久资源速度 | 男人和女人做事情在线视频网站免费观看 | 日韩有码视频在线| 国产二区视频在线观看| 国产精品久久三| 亚洲国产精品www| 色综合狠狠操| 久久久免费精品视频| 亚洲欧美se| 欧美精品 国产精品| 天海翼一区二区三区四区在线观看| av影院午夜一区| 麻豆中文字幕在线观看| 国产精品嫩草99av在线| 91啪国产在线| 成人免费在线观看av| 97视频免费在线看| 日韩免费成人| 久久在线观看视频| 91精品影视| 亚洲精品色婷婷福利天堂| 91网在线看| 欧美日本一区二区三区四区| 天堂a中文在线| 天天综合天天做天天综合| qvod激情图片| 1024亚洲合集| 精品日韩久久久| 99久久精品免费看国产免费软件| 亚洲午夜精品国产| 久久草av在线| 少妇熟女一区二区| 国产99久久久国产精品潘金| 国产精品jizz在线观看老狼| 狠狠色狠狠色合久久伊人| 一区二区精品在线| 国产黑丝在线一区二区三区| 中文字幕乱码免费| av一二三不卡影片| 婷婷丁香激情网| 国产精品国产成人国产三级| 天天影视综合色| 成人免费在线视频观看| 精产国产伦理一二三区| 亚洲国产综合色| 日本一区高清| 欧美精品在线一区二区| 国产不卡在线| 亚洲精品一区二区三区不| 日韩av超清在线观看| 久久激情五月丁香伊人| 99热这里只有精品首页| 秋霞午夜一区二区| 五月综合激情| 欧美日韩一区二区三| 久久国产精品一区二区| 久久综合九色综合88i| 中文字幕欧美国产| 中文字幕免费在线视频| 91精品在线一区二区| 在线最新版中文在线| 欧美精品一区二区三区国产精品 | 欧美gv在线观看| 中文字幕亚洲第一| 日本久久成人网| 98国产高清一区| 精品一区二区三区视频在线观看| 国产一级不卡视频| 91精品91久久久久久| 久久精品亚洲乱码伦伦中文| 爱爱永久免费视频| 日本中文字幕一区二区视频 | 亚洲一级淫片| 日韩国产美国| 91在线视频官网| 最新av在线| 亚洲精品国产美女| 色橹橹欧美在线观看视频高清| 99c视频在线| 粉嫩高潮美女一区二区三区| 欧美图区在线视频| 久久综合中文| 国产丝袜精品丝袜| 欧美一级淫片丝袜脚交| 日本大胆欧美人术艺术动态| 中文字幕人成不卡一区| 牛牛影视精品影视| 天堂va蜜桃一区二区三区| 黄色小说在线播放| 久久天天东北熟女毛茸茸| 国产精品国内免费一区二区三区| 欧美亚洲国产免费| 久草成人资源| 亚洲国产精品免费视频| 亚洲在线播放电影| 欧美中文字幕一区二区| 久久99久久99精品蜜柚传媒| 久久久精品蜜桃| 高清国产福利在线观看| 久久最新资源网| 亚洲免费影院| 毛片毛片毛片毛片| 日韩精品免费在线观看| 青青草原综合久久大伊人精品 | 久久久久亚洲精品| 视频一区二区不卡| 香蕉视频在线观看网站| 日韩一区二区三区国产| 免费视频一区| 情趣网站视频在线观看| 久久精品中文字幕免费mv| 性久久久久久| 日本h片在线看| 欧美乱妇40p| 国产电影精品久久禁18| 黄色av电影在线播放| 国产欧美va欧美va香蕉在| 国产日韩欧美一区二区三区乱码| 伊人网在线播放| 日韩国产美国| 正在播放亚洲一区| 欧美福利在线| 伊人精彩视频| 欧美专区日韩视频| 国产午夜亚洲精品理论片色戒 | 日本视频不卡| 91影院在线免费观看视频| 久久精品视频免费观看| 午夜激情成人网| 一区二区免费在线观看| 精品1区2区3区| 你懂的国产精品永久在线| 毛片一级免费一级| 2019亚洲日韩新视频| 国产日韩欧美在线一区| 成人自拍视频| 免费毛片小视频| 中文字幕日韩av电影| 国产成人精品在线看| 亚洲天堂导航| 国产亚洲精品久久久久久久| 日韩av在线播放资源| 日韩中文字幕亚洲一区二区va在线| 尤物网在线观看| 国产精品日韩二区| 欧美三级欧美一级| 亚洲三级免费| a级网站在线播放| 日韩av在线一区二区三区| 日韩久久免费av| 看电视剧不卡顿的网站| 日本乱码一区二区三区不卡| 只有这里有精品| 在线观看国产成人av片| 99re视频精品| 国产精品视屏| 激情乱色小说视频| 91在线观看免费| 欧美嫩在线观看| 校园激情久久| 中文在线资源| 成人在线观看黄| 2019中文字幕在线观看| 亚洲女同女同女同女同女同69| 综合亚洲自拍| 黄色片在线播放| 日韩精品一线二线三线| 亚洲一二在线观看| 欧美激情一二三区| 国产一区99| 不卡在线视频| 亚洲成人18| 三级精品视频久久久久| 中文字幕国产一区二区| 国产欧美日韩精品高清二区综合区| 在线播放中文字幕| 日本午夜精品一区二区三区| 亚洲国产三级网| 欧美激情在线看| 日韩欧美一区免费| 日本高清在线观看| 国产精品wwwww| 亚洲一区二区三区乱码aⅴ| 欧美一区二区日韩一区二区| 粉嫩高潮美女一区二区三区| 极品国产人妖chinesets亚洲人妖| 亚洲第一区视频| 潘金莲一级淫片aaaaa免费看| 久久久久久欧美| 欧美日韩一区二区在线视频| 成人精品一区二区三区中文字幕| 精品国产一区二区三区小蝌蚪 |