HTTPS 與 TLS

在實(shí)際工作中,涉及到X.509證書(shū)結(jié)構(gòu)TLS證書(shū)校驗(yàn)鏈的場(chǎng)景便是 HTTPS 網(wǎng)絡(luò)請(qǐng)求。
這篇文章從HTTPS網(wǎng)絡(luò)請(qǐng)求開(kāi)始,詳細(xì)介紹HTTPS秘鑰協(xié)商的詳細(xì)流程、TLS證書(shū)校驗(yàn)流程、TLS證書(shū)鏈校驗(yàn)流程。

  • HTTPS
    HTTPS簡(jiǎn)介。
  • TLS握手
    HTTPS秘鑰協(xié)商流程詳細(xì)說(shuō)明。
  • TLS證書(shū) 校驗(yàn)
  • TLS證書(shū)鏈 校驗(yàn)

一、HTTPS簡(jiǎn)介

HTTPS (Secure Hypertext Transfer Protocol)安全超文本傳輸協(xié)議,是一種通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議。
HTTPS 利用 SSL/TLS 來(lái)加密數(shù)據(jù)包,經(jīng)由 HTTP 進(jìn)行通信。
其設(shè)計(jì)的主要目的是,提供對(duì)網(wǎng)站服務(wù)器的身份認(rèn)證、保護(hù)交換數(shù)據(jù)的隱私與完整性。

image.png

TLS/SSL

TLS 與 SSL某種程度上指的是同一個(gè)概念:

  • SSL(Secure Socket Layer) 1994年由 瀏覽器開(kāi)發(fā)商Netscape(美國(guó)網(wǎng)景通信公司) 率先倡導(dǎo)研發(fā),為數(shù)據(jù)通訊提供安全支持,開(kāi)發(fā)了最初的幾個(gè)版本SSL 1.0、SSL 2.0、SSL 3.0。
  • TLS(Transport LayerSecurity)前身為SSL,1999年從 3.1 開(kāi)始被 IETF(Internet Engineering Task Force,Internet 工程任務(wù)組)標(biāo)準(zhǔn)化并改名,發(fā)展至今已經(jīng)有 TLS 1.0、TLS 1.1、TLS 1.2 三個(gè)版本。

SSL3.0、TLS1.0由于存在安全漏洞,已經(jīng)很少被使用到。TLS 1.3 因改動(dòng)會(huì)比較大,目前尚處在草案階段。當(dāng)前被廣泛使用的是是TLS 1.1、TLS 1.2;

image.png

如上圖所示,TLS/SSL是介于TCP和HTTP之間的一層安全協(xié)議。

HTTP

HTTP(HyperText Transfer Protocol)超文本傳輸協(xié)議。
HTTP是一個(gè)客戶端(用戶)和服務(wù)端之間請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn),其最初的設(shè)計(jì)目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。

二、SSL/TLS 握手

SSL/TLS握手過(guò)程 用一句話總結(jié)就是:用非對(duì)稱加密的手段傳遞密鑰,然后用密鑰進(jìn)行對(duì)稱加密傳遞數(shù)據(jù)。
SSL/TLS握手,秘鑰協(xié)商的過(guò)程大致可分為以下幾個(gè)步驟:

  • 1、Client Hello
    Client——>Server 客戶端向服務(wù)端發(fā)送 Client Hello 消息。
  • 2、Server Hello
    Server——>Client 服務(wù)端向客戶端發(fā)送 Server Hello 消息。
  • 3、Certificate
    Server——>Client 服務(wù)端下發(fā)公鑰證書(shū)。
  • 4、Server Key Exchange
    Server——>Client 服務(wù)端下發(fā)秘鑰交換的額外數(shù)據(jù)。
  • 5、Server Hello Done
    Server——>Client 服務(wù)端握手信息發(fā)送完畢。
  • 6、證書(shū)合法性校驗(yàn)
    Client 對(duì) Server下發(fā)的公鑰證書(shū)進(jìn)行合法性校驗(yàn)。
  • 7、協(xié)商加密秘鑰
    Client——>Server 協(xié)商計(jì)算客戶端、服務(wù)端通信的加密秘鑰enc_key
  • 8、Change Cipher Spec Protocol
    Server——>Client 服務(wù)端告知客戶端后續(xù)的通信都采用協(xié)商的秘鑰enc_key算法進(jìn)行加密通信。
  • 9、Encrypted Handshake Message
    Server——>Client 服務(wù)端用秘鑰enc_key加密,發(fā)出的第一條加密消息。
  • 10、Application Data
    Client——>Server SSL/TLS 握手完成,所有后續(xù)通信均 采用秘鑰enc_key加密。

SSL/TLS握手,秘鑰協(xié)商的流程圖 如下圖所示:

image.png

這里以客戶端百度主頁(yè)發(fā)起Https請(qǐng)求為例,用 Wireshark抓包 對(duì)SSL/TLS握手的各個(gè)環(huán)節(jié)進(jìn)行介紹,抓包示意圖如下圖所示:

image.png

2.1、Client Hello

Client Hello( Client——>Server ): 客戶端向服務(wù)端發(fā)送 Client Hello 消息。
消息中包含客戶端的 TSL版本信息秘鑰隨機(jī)數(shù)、加密套件候選列表壓縮算法候選列表擴(kuò)展字段等信息,相關(guān)信息抓包如下:

image.png

各字段詳細(xì)描述如下:

  • Version : 支持的最高TSL協(xié)議版本,從低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  • Random:隨機(jī)數(shù) random_C 用于后續(xù)的密鑰協(xié)商;
  • Session ID:有或者無(wú),有則客戶端傳上一次session的id可以恢復(fù)session;
  • Cipher Suite:客戶端支持的密碼算法列表,供服務(wù)器選擇;
  • Compression Methods:客戶端支持的壓縮算法列表,用于后續(xù)的信息壓縮傳輸;
  • extensions:擴(kuò)展字段;

2.2、Server Hello

Server Hello( Server——>Client ): 服務(wù)端向客戶端發(fā)送 Server Hello 消息。
消息中包括服務(wù)端選擇使用的TSL協(xié)議版本選擇的加密套件、選擇的壓縮算法、服務(wù)端生成的隨機(jī)數(shù)等,相關(guān)信息抓包如下:

[圖片上傳失敗...(image-54a50e-1678667179308)]

  • Version:服務(wù)器選擇的版本;
  • Random:隨機(jī)數(shù) random_S 用于后續(xù)的密鑰協(xié)商;
  • Session ID:有或者無(wú),有則客戶端傳上一次session的id可以恢復(fù)session;
  • Cipher Suite:服務(wù)端選擇的密鑰算法;
  • Compression Methods:服務(wù)端選擇的壓縮算法;

注:到此 客戶端 和 服務(wù)端 都擁有了兩個(gè)隨機(jī)數(shù)(random_C+ random_S),這兩個(gè)隨機(jī)數(shù)會(huì)在后續(xù)生成對(duì)稱秘鑰時(shí)會(huì)用到。

2.3、Certificate

Certificate( Server——>Client ): 服務(wù)端下發(fā)公鑰證書(shū)給客戶端。相關(guān)信息抓包如下:

image.png
  • Certificate: 服務(wù)端的公鑰證書(shū);

注:Certificate 公鑰證書(shū)的詳細(xì)結(jié)構(gòu)會(huì)在下文進(jìn)行詳細(xì)舉例說(shuō)明。

2.4、Server Key Exchange

Server Key Exchange( Server——>Client ): 該消息的目的是 攜帶密鑰交換額外數(shù)據(jù)。

image.png

該消息內(nèi)容對(duì)于不同的協(xié)商算法套件會(huì)存在差異:

  • 對(duì)于使用DHE/ECDHE非對(duì)稱密鑰協(xié)商算法的SSL握手,服務(wù)器發(fā)送其使用的DH參數(shù);
  • RSA算法不會(huì)繼續(xù)該握手流程(DH、ECDH也不會(huì)發(fā)送server key exchange)。

2.5、Server Hello Done

Server Hello Done( Server——>Client ):
通知客戶端,Server端已經(jīng)將所有握手消息發(fā)送完畢。

image.png

2.6、證書(shū)校驗(yàn)

客戶端拿到服務(wù)端公鑰證書(shū)后,需對(duì)該證書(shū)的合法性進(jìn)行校驗(yàn)。校驗(yàn)內(nèi)容如下:

  • 證書(shū)鏈的可信性;
  • 證書(shū)是否吊銷;
  • 證書(shū)有效期;
  • 證書(shū)域名校驗(yàn),核查證書(shū)域名是否與當(dāng)前的訪問(wèn)域名匹配;

注:證書(shū)的詳細(xì)校驗(yàn)過(guò)程將在下文進(jìn)行詳細(xì)介紹

2.7、協(xié)商加密秘鑰

Client——>Server: 這一步包含三個(gè)步驟,主要是 協(xié)商計(jì)算客戶端、服務(wù)端通信的加密秘鑰。

image.png
  • Client Key Exchange
    證書(shū)合法性驗(yàn)證通過(guò)之后,客戶端產(chǎn)生隨機(jī)數(shù)字Pre-master。
    計(jì)算生成秘鑰enc_key { enc_key=Fuc(random_C, random_S, Pre-Master) } 。
    Pre-masterenc_key證書(shū)公鑰加密(非對(duì)稱加密算法)發(fā)送給服務(wù)端;
  • Change Cipher Spec Protocol
    客戶端通知服務(wù)端后續(xù)的通信都采用協(xié)商的密鑰enc_key加密算法進(jìn)行加密通信;
  • Encrypted Handshake Message
    客戶端:客戶端將之前所有的握手?jǐn)?shù)據(jù)(包括接受、發(fā)送)生成摘要;然后用秘鑰enc_key加密(對(duì)稱加密算法),發(fā)送給對(duì)應(yīng)的服務(wù)端。
    服務(wù)端:服務(wù)端收到消息后,會(huì)用秘鑰enc_key解密客戶端的摘要信息;然后用與客戶端相同的算法生成服務(wù)端摘要信息,最后對(duì)比兩個(gè)摘要信息相同,則驗(yàn)證通過(guò)。

2.8、Change Cipher Spec Protocol

Change Cipher Spec Protocol( Server——>Client ): 服務(wù)器同樣發(fā)送 Change Cipher Spec Protocol 以告知客戶端后續(xù)的通信都采用協(xié)商的秘鑰enc_key算法進(jìn)行加密通信;

image.png

2.9、Encrypted Handshake Message

Encrypted Handshake Message( Server——>Client ):
服務(wù)端:服務(wù)端會(huì)將握手過(guò)程的消息生成摘要再用秘鑰enc_key加密,這是服務(wù)端發(fā)出的第一條加密消息;
客戶端:客戶端接收后會(huì)用秘鑰enc_key解密,能解出來(lái)說(shuō)明協(xié)商的秘鑰是一致的。

image.png

2.10、Application Data ( Client——>Server )

Application Data Client——>Server ): 雙方已安全地協(xié)商出了同一份秘鑰enc_key,所有的應(yīng)用層數(shù)據(jù)都會(huì)用這個(gè)秘鑰加密后再通過(guò) TCP 進(jìn)行可靠傳輸。

image.png

SANs證書(shū)

SANs是Subject Alternate Names的簡(jiǎn)稱,SANs證書(shū)是一種SSL證書(shū),它支持添加多個(gè)域名,允許將多個(gè)域名寫入同一個(gè)證書(shū)中,這樣就可以保護(hù)多個(gè)域名,從而降低了運(yùn)維人員的管理成本,提高了證書(shū)管理效率。SAN證書(shū)有時(shí)也稱為統(tǒng)一通信證書(shū)(統(tǒng)一通信證書(shū))、多域名證書(shū)等。


image.png

沃通CA出售的SSL證書(shū)大都支持SANs特性:

1,一張證書(shū)最多可保護(hù) 250-1000 個(gè)域名;

2,可同時(shí)使用的服務(wù)器數(shù)不限,不另付費(fèi)用;

3,可以支持增加、刪除或修改域名等功能。

4,部分 SANs 證書(shū)還支持將公網(wǎng) IP 地址作為 SAN 直接添加到證書(shū)中。

通過(guò)http 的 header host 來(lái)進(jìn)行判斷

2.11 總結(jié)

SSL/TLS握手協(xié)商:用非對(duì)稱加密的手段傳遞密鑰,然后用密鑰進(jìn)行對(duì)稱加密傳遞數(shù)據(jù)。

三、證書(shū)校驗(yàn)

  • 1、X.509數(shù)字證書(shū)結(jié)構(gòu)舉例
  • 2、客戶端 如何校驗(yàn)服務(wù)端下發(fā)的公鑰證書(shū)?

3.1、X.509數(shù)字證書(shū)

了解證書(shū)校驗(yàn)原理之前,先認(rèn)識(shí)一下X.509證書(shū)的結(jié)構(gòu)。

X.509是密碼學(xué)里公鑰證書(shū)格式標(biāo)準(zhǔn),當(dāng)前X.509證書(shū)已應(yīng)用在包括TLS/SSL在內(nèi)的眾多網(wǎng)絡(luò)協(xié)議里。
一個(gè)具體的X.509 v3數(shù)字證書(shū)結(jié)構(gòu)大致如下 :

// X.509數(shù)字證書(shū)Certificate  // 版本號(hào)  Version Number   // 序列號(hào)  Serial Number   // 證書(shū)簽名算法ID  Signature Algorithm ID  // 證書(shū)發(fā)行者  Issuer Name  // 證書(shū)有效時(shí)間  Validity period  // 證書(shū)主體名稱  Subject name  // 證書(shū)主體公鑰信息  Subject Public Key Info    // 證書(shū)公鑰算法    Public Key Algorithm    // 證書(shū)公鑰    Subject Public Key  // 發(fā)行商唯一ID  Issuer Unique Identifier (optional)  // 主體唯一ID  Subject Unique Identifier (optional)  // 擴(kuò)展  Extensions (optional) // 證書(shū)簽名算法Certificate Signature Algorithm// 證書(shū)簽名值Certificate Signature

這里以百度Tls證書(shū)進(jìn)行舉例:

image.png

image.png

3.2、證書(shū)校驗(yàn)

客戶端驗(yàn)證服務(wù)端下發(fā)的證書(shū),主要包括以下幾個(gè)方面:

  • 1、校驗(yàn)證書(shū)是否是受信任CA根證書(shū)頒發(fā)機(jī)構(gòu)頒發(fā);
  • 2、校驗(yàn)證書(shū)是否在上級(jí)證書(shū)的吊銷列表
  • 3、校驗(yàn)證書(shū)是否過(guò)期;
  • 4、校驗(yàn)證書(shū)域名是否一致。

3.2.1、證書(shū)可信性

校驗(yàn)證書(shū)是否可信:
校驗(yàn)證書(shū)是否是由受信任的CA根證書(shū)頒發(fā)機(jī)構(gòu)頒發(fā)。

為了確保客戶端獲取到的服務(wù)端公鑰不被篡改,需引入權(quán)威的第三方CA機(jī)構(gòu)。
CA機(jī)構(gòu)負(fù)責(zé)核實(shí)公鑰擁有者信息、頒發(fā)證書(shū)(對(duì)服務(wù)端公鑰進(jìn)行簽名)、同時(shí)為使用者提供證書(shū)驗(yàn)證服務(wù)。

image.png

CA機(jī)構(gòu) 頒發(fā)證書(shū)的基本原理:

  • 服務(wù)端生成一對(duì)公鑰、私鑰
  • 服務(wù)端將自己的公鑰提供給CA機(jī)構(gòu)。
  • CA機(jī)構(gòu)核實(shí)服務(wù)端公鑰擁有者信息:
    核實(shí)申請(qǐng)者提供信息的真實(shí)性:如組織是否存在、企業(yè)是否合法、是否擁有域名的所有權(quán)等。
  • CA機(jī)構(gòu)簽發(fā)證書(shū):
    CA機(jī)構(gòu) 計(jì)算 服務(wù)器公鑰摘要信息,然后利用CA機(jī)構(gòu)私鑰(CA機(jī)構(gòu)有一對(duì)公鑰、私鑰)加密摘要信息
    加密后的包含加密摘要信息的服務(wù)端公鑰CA機(jī)構(gòu)頒發(fā)的證書(shū)。

客戶端 驗(yàn)證服務(wù)端公鑰的基本原理為:

  • 客戶端獲取到服務(wù)端的公鑰
    Https請(qǐng)求 TLS握手過(guò)程中,服務(wù)器公鑰會(huì)下發(fā)到請(qǐng)求的客戶端。
  • 客戶端用存儲(chǔ)在本地的CA機(jī)構(gòu)的公鑰,對(duì) 服務(wù)端公鑰中對(duì)應(yīng)的摘要信息進(jìn)行解密,獲取到服務(wù)端公鑰摘要信息A;
  • 客戶端根據(jù)對(duì)服務(wù)端公鑰進(jìn)行摘要計(jì)算,得到摘要信息B;
  • 對(duì)比摘要信息A與B,相同則證書(shū)驗(yàn)證通過(guò);

3.2.2、證書(shū)吊銷

CA機(jī)構(gòu)能夠簽發(fā)證書(shū),同樣也存在機(jī)制宣布以往簽發(fā)的證書(shū)無(wú)效。若證書(shū)的申請(qǐng)主體出現(xiàn):私鑰丟失申請(qǐng)證書(shū)無(wú)效等情況,CA機(jī)構(gòu)需要廢棄該證書(shū)。

主要存在兩類機(jī)制:CRL 與 OCSP。

  • CRL(Certificate Revocation List)
    證書(shū)吊銷列表:是一個(gè)單獨(dú)的文件,該文件包含了 CA機(jī)構(gòu) 已經(jīng)吊銷的證書(shū)序列號(hào)與吊銷日期;
    證書(shū)中一般會(huì)包含一個(gè) URL 地址 CRL Distribution Point,通知使用者去哪里下載對(duì)應(yīng)的 CRL 以校驗(yàn)證書(shū)是否吊銷。
    該吊銷方式的優(yōu)點(diǎn)是不需要頻繁更新,但是不能及時(shí)吊銷證書(shū),因?yàn)?CRL 更新時(shí)間一般是幾天,這期間可能已經(jīng)造成了極大損失。
  • OCSP(Online Certificate Status Protocol)
    證書(shū)狀態(tài)在線查詢協(xié)議:一個(gè)實(shí)時(shí)查詢證書(shū)是否吊銷的方式。
    請(qǐng)求者發(fā)送證書(shū)的信息并請(qǐng)求查詢,服務(wù)器返回正常、吊銷或未知中的任何一個(gè)狀態(tài)。
    證書(shū)中一般也會(huì)包含一個(gè) OCSP 的 URL 地址,要求查詢服務(wù)器具有良好的性能。
    部分 CA 或大部分的自簽 CA (根證書(shū))都是未提供 CRL 或 OCSP 地址的,對(duì)于吊銷證書(shū)會(huì)是一件非常麻煩的事情。

3.2.3、證書(shū)過(guò)期

校驗(yàn)證書(shū)的有效期是否已經(jīng)過(guò)期:主要判斷證書(shū)中Validity period字段是否過(guò)期。

3.2.4、證書(shū)域名

校驗(yàn)證書(shū)域名是否一致:核查 證書(shū)域名是否與當(dāng)前的訪問(wèn)域名 匹配。

舉例中:
我們請(qǐng)求的域名 www.baidu.com 是否與證書(shū)文件DNS標(biāo)簽下所列的域名匹配

四、證書(shū)鏈校驗(yàn)

上一節(jié)介紹證書(shū)校驗(yàn)場(chǎng)景,適用于服務(wù)器證書(shū)的簽發(fā)機(jī)構(gòu)就是Ca機(jī)構(gòu)。
實(shí)際證書(shū)申請(qǐng)中,由于權(quán)威的CA機(jī)構(gòu)數(shù)量不多,若所有的服務(wù)器證書(shū)都向權(quán)威CA機(jī)構(gòu)申請(qǐng),那么CA機(jī)構(gòu)的工作量就會(huì)非常大。因此CA機(jī)構(gòu)采取授權(quán) 二級(jí)機(jī)構(gòu)的方式來(lái)管理證書(shū)申請(qǐng),經(jīng)授權(quán)二級(jí)機(jī)構(gòu)也可以簽發(fā)服務(wù)器證書(shū)

image.png

4.1、證書(shū)鏈校驗(yàn)

證書(shū)簽發(fā):

  • 根證書(shū)CA機(jī)構(gòu) 使用自己的私鑰對(duì)中間證書(shū)進(jìn)行簽名,授權(quán)中間機(jī)構(gòu)證書(shū);
  • 中間機(jī)構(gòu)使用自己的私鑰對(duì)服務(wù)器證書(shū)進(jìn)行簽名,從而授權(quán)服務(wù)器證書(shū)。

證書(shū)校驗(yàn):

  • 客戶端通過(guò)服務(wù)器證書(shū)簽發(fā)機(jī)構(gòu)信息,獲取到中間證書(shū)公鑰;利用中間證書(shū)公鑰進(jìn)行服務(wù)器證書(shū)的簽名驗(yàn)證。
    a、中間證書(shū)公鑰解密 服務(wù)器簽名,得到證書(shū)摘要信息;
    b、摘要算法計(jì)算 服務(wù)器證書(shū) 摘要信息;
    c、然后對(duì)比兩個(gè)摘要信息。
  • 客戶端通過(guò)中間證書(shū)簽發(fā)機(jī)構(gòu)信息,客戶端本地查找到根證書(shū)公鑰;利用根證書(shū)公鑰進(jìn)行中間證書(shū)的簽名驗(yàn)證。
image.png

4.2、中間證書(shū)怎么獲???

這里可能大家有一個(gè)疑問(wèn),根證書(shū)是內(nèi)置在終端設(shè)備上或?yàn)g覽器中的,那中間機(jī)構(gòu)證書(shū)怎么獲?。?/p>

這里仍以百度Tls證書(shū)進(jìn)行舉例,百度服務(wù)器證書(shū) 簽發(fā)者公鑰(中間機(jī)構(gòu)公鑰)通過(guò)下圖中的URI獲?。?/p>

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容