日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TLS1.3握手流程以及参数详解

發(fā)布時間:2024/4/11 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TLS1.3握手流程以及参数详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

TLS1.3概述

TLS1.3總共有兩層,分別是握手協(xié)議(handshake protocol)和記錄協(xié)議(record protocol),握手協(xié)議在記錄協(xié)議的上層,記錄協(xié)議是一個分層協(xié)議。其中握手協(xié)議中還包括了警告協(xié)議(alert protocol)。

TLS1.3概括如表格所示:

本文將詳細闡述握手協(xié)議,并且抓包分析。

TLS1.3記錄協(xié)議:

記錄協(xié)議位于握手協(xié)議下層,發(fā)送方從高層接受任意長度的非空數(shù)據(jù),對其進行合并或分塊處理,然后利用帶有輔助數(shù)據(jù)的認證加密AEAD(authenticated encryption with associated data)進行加密傳輸。

接收方接受數(shù)據(jù)后對其進行解密和驗證,重組后再傳送給高層用戶。

TLS1.3警告協(xié)議:

目的是以簡單的通知機制告知通信出現(xiàn)異常情況,警告消息通常會攜帶Close_notify異常,在連接關(guān)閉的時候報告錯誤,Alert_Level字段標識告警的嚴重程度,可取值Warning或者Fatal,嚴重程度為Fatal時會立即終止當前連接。

TLS1.3握手協(xié)議:

握手協(xié)議主要分為三個流程

  • 密鑰交換:選擇TLS協(xié)議版本和加密的算法,并且協(xié)商算法所需的參數(shù)。這段是明文傳輸?shù)?/li>
  • 服務(wù)器參數(shù):建立其他握手協(xié)議參數(shù),例如是否需要認證客戶端,支持何種應(yīng)用層協(xié)議等。
  • 認證:對服務(wù)器進行認證(包括可選的客戶端認證)并且提供密鑰確認和驗證握手完整性功能。
  • 這三個階段完成后就可以進行應(yīng)用層數(shù)據(jù)傳輸。

    流程圖如下所示:

    注:+:上一消息的擴展消息;*:可選發(fā)送

    {}:用握手層流密鑰加密;[]:用流密鑰加密

    TLS1.3的交互過程分為1-RTT,RTT是時延往返的意思。RTT越小速度越快。

    在TLS1.2里交互過程需要2-RTT,可見TLS1.3加快了交互的速度。

    正常連接(1-RTT)流程如下:

    第1步,客戶端發(fā)送 ClientHello 消息,該消息主要包括客戶端支持的協(xié)議版本、會話ID、密碼套件、壓縮算法、以及擴展消息(密鑰共享、預(yù)共享密鑰、預(yù)共享密鑰模式);

    第2步,服務(wù)端回復(fù) ServerHello,包含選定的加密套件;發(fā)送證書給客戶端;使用證書對應(yīng)的私鑰對握手消息簽名,將結(jié)果發(fā)送給客戶端;選用客戶端提供的參數(shù)生成臨時公鑰,結(jié)合選定的參數(shù)計算出用于加密 HTTP 消息的共享密鑰;服務(wù)端生成的臨時公鑰通過 KeyShare 消息發(fā)送給客戶端;

    第3步,客戶端接收到 KeyShare 消息后,使用證書公鑰進行簽名驗證,獲取服務(wù)器端的臨時公鑰,生成會話所需要的共享密鑰;

    第4步,雙方使用生成的共享密鑰對消息加密傳輸,保證消息安全。

    簡單的說就是:


    即4部分。ClientHello,SeverHello,Client認證,數(shù)據(jù)交互。

    接下來分析這4個部分。

    分析ClinetHello:



    Handshake Type:ClientHello,表示握手消息類型,此處是ClientHello
    Length:574,即長度為574
    Version:TLS1.2(0x0303),表示版本號為1.2,TLS1.3中規(guī)定此處必須置為0x0303,即TLS1.2,起到向后兼容的作用。1.3版本用來協(xié)商版本號的部分在擴展當中,而之前的版本就在此處進行。
    Random : 隨機數(shù),是由安全隨機數(shù)生成器生成的32個字節(jié)。
    Session ID Length :會話ID的長度。
    Session ID :會話ID,TLS 1.3之前的版本支持“會話恢復(fù)”功能,該功能已與1.3版本中的預(yù)共享密鑰合并。為了兼容以前的版本,該字段必須是非空的,因此不提供TLS 1.3之前會話的客戶端必須生成一個新的32字節(jié)值。該值不必是隨機的,但應(yīng)該是不可預(yù)測的,以避免實現(xiàn)固定在特定值,否則,必須將其設(shè)置為空。
    Cipher Suites Length: 即下面Cipher Suites的長度
    Cipher Suites是密碼套件,表示客戶端提供可選擇的加密方式,如圖所示:

    每個加密套件都包含,密鑰交換,簽名算法,加密算法,哈希算法。

    Compression Methons (1 method)表示壓縮方法,長度為1,內(nèi)容為空

    Exentisons擴展部分,是TLS1.3才開始使用,是TLS1.3的顯著特征。每一個擴展都包含類型(type),長度(length)和數(shù)據(jù)(data)三個部分。

    下面分析幾個相對重要的擴展:

    1)key_share

    key_share 是橢圓曲線類型對應(yīng)的公鑰,如圖所示

    此處包含兩個KeyShareEntry,第一個是預(yù)留的空值,第二個是x25519曲線組,具體數(shù)據(jù)在KeyExchange字段中;每個KeyShareEntry都代表一組密鑰交換參數(shù)。

    2)signature_algorithms

    Signature_algorithms擴展是,客戶端提供簽名算法,讓服務(wù)器選擇

    以第一個簽名算法為例,ecdsa_secp256r1_sha256,使用sha256作為簽名中的哈希,簽名算法為ecdsa。

    3)psk_key_exchange_modes

    psk_key_exchange_modes是psk密鑰交互模式選擇

    此處的PSK模式為(EC)DHE下的PSK,客戶端和服務(wù)器必須提供KeyShare

    如果是僅PSK模式,則服務(wù)器不需要提供KeyShare。

    4)pre_shared_key

    psk是預(yù)共享密鑰認證機制,相當于session ticket再加一些檢驗的東西

    Identity中包含的是客戶端愿意進行協(xié)商的服務(wù)器身份列表

    PSK binder表示已經(jīng)構(gòu)建當前PSK與當前握手之間的綁定。

    分析ServerHello:


    發(fā)現(xiàn)和ClientHello類似。

    CkientHello提供加密方式的選擇,而ServerHello實質(zhì)是在Client提供的多種加密中選定加密的方式

    client 的認證部分:


    待到client認證完成,發(fā)送給服務(wù)端,至此建立連接,可以發(fā)送數(shù)據(jù)。

    數(shù)據(jù)傳輸部分


    可見數(shù)據(jù)經(jīng)過TLS1.3加密,進行傳輸。

    轉(zhuǎn)載自: nsfocus 技術(shù)博客
    原文作者: 陳健
    原文鏈接: http://blog.nsfocus.net/tls1-3protocol/

    總結(jié)

    以上是生活随笔為你收集整理的TLS1.3握手流程以及参数详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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