加密通訊過程

一次加密通訊的過程

xx.png

1、client_hello

  客戶端發起請求,以明文傳輸請求信息,包含版本信息,加密套件候選列表,壓縮算法候選列表,隨機數,擴展字段等信息,相關信息如下:
  • 支持的最高TSL協議版本version,從低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,當前基本不再使用低于 TLSv1 的版本

  • 客戶端支持的加密套件 cipher suites 列表, 每個加密套件對應前面 TLS 原理中的四個功能的組合:認證算法 Au (身份驗證)、密鑰交換算法 KeyExchange(密鑰協商)、對稱加密算法 Enc (信息加密)和信息摘要 Mac(完整性校驗)

  • 支持的壓縮算法 compression methods 列表,用于后續的信息壓縮傳輸

  • 隨機數 random_C,用于后續的密鑰的生成

2、server_hello+server_certificate+sever_hello_done

  • server_hello, 服務端返回協商的信息結果,包括選擇使用的協議版本 version,選擇的加密套件 cipher suite,選擇的壓縮算法 compression method、隨機數 random_S 等,其中隨機數用于后續的密鑰協商

  • server_certificates, 服務器端配置對應的證書鏈,用于身份驗證與密鑰交換

  • server_hello_done,通知客戶端 server_hello 信息發送結束

3、證書校驗

  客戶端驗證證書的合法性,如果驗證通過才會進行后續通信,否則根據錯誤情況不同做出提示和操作,合法性驗證包括如下:
  • [證書鏈]的可信性 trusted certificate path

  • 證書是否吊銷 revocation,有兩類方式離線 CRL 與在線 OCSP,不同的客戶端行為會不同

  • 有效期 expiry date,證書是否在有效時間范圍

  • 域名 domain,核查證書域名是否與當前的訪問域名匹配,匹配規則后續分析

4、client_key_exchange+change_cipher_spec+encrypted_handshake_message

  • client_key_exchange,合法性驗證通過之后,客戶端計算產生隨機數字 Pre-master,并用證書公鑰加密,發送給服務器

  • 此時客戶端已經獲取全部的計算協商密鑰需要的信息:兩個明文隨機數 random_C 和 random_S 與自己計算產生的 Pre-master,計算得到協商密鑰
    enc_key=Fuc(random_C, random_S, Pre-Master)

  • change_cipher_spec,客戶端通知服務器后續的通信都采用協商的通信密鑰和加密算法進行加密通信

  • encrypted_handshake_message,結合之前所有通信參數的 hash 值與其它相關信息生成一段數據,采用協商密鑰 session secret 與算法進行加密,然后發送給服務器用于數據與握手驗證

5、change_cipher_spec+encrypted_handshake_message

  • 服務器用私鑰解密加密的 Pre-master 數據,基于之前交換的兩個明文隨機數 random_C 和 random_S,計算得到協商密鑰:enc_key=Fuc(random_C, random_S, Pre-Master)

  • 計算之前所有接收信息的 hash 值,然后解密客戶端發送的 encrypted_handshake_message,驗證數據和密鑰正確性

  • change_cipher_spec, 驗證通過之后,服務器同樣發送 change_cipher_spec 以告知客戶端后續的通信都采用協商的密鑰與算法進行加密通信

  • encrypted_handshake_message, 服務器也結合所有當前的通信參數信息生成一段數據并采用協商密鑰 session secret 與算法加密并發送到客戶端

6、握手結束

  • 客戶端計算所有接收信息的 hash 值,并采用協商密鑰解密 encrypted_handshake_message,驗證服務器發送的數據和密鑰,驗證通過則握手完成

7、加密通信

  • 開始使用協商密鑰與算法進行加密通信

 

原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/67644

(1)
641348038@qq.com641348038@qq.com
上一篇 2017-02-07
下一篇 2017-02-07

相關推薦

  • Python內置數據結構——集合set

    集合 定義 set翻譯為集合 collection翻譯為集合類型,是一個較大的概念 set是一個可變的、無序的、不重復的元素組成的集合 set的元素要求必須可以hash,目前已學的不可hash的類型只有list、set 元素不可以索引 set可以迭代 set的初始化 set_1 =set() #表示定義一個空集合set_1 set_1 =set(iterab…

    Linux干貨 2017-10-03
  • SELinux介紹

    SELinux介紹 SELinux: Secure Enhanced Linux, 是美國國家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)開發的 Linux的一個強制訪問控制的安全模塊。 2000年以GNU GPL發布, Linux內核2.6版本后集成在內核中D…

    Linux干貨 2016-10-08
  • linux流程控制if,for,case,while

     Shell編程中循環命令用于特定條件下決定某些語句重復執行的控制方式,有三種常用的循環語句:for、while和until。while循環和for循環屬于“當型循環”,而until屬于“直到型循環”。循環控制符:break和continue控制流程轉向。 選擇執行:           …

    Linux干貨 2017-03-25
  • Linux之數組

      Linux之數組     數組介紹?數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。 ?變量:存儲單個元素的內存空間?數組名和索引索引:編號從0開始,屬于數值索引注意:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,bash4.0版本之后開始支持。bash的數組支持稀疏格式(索引不連續)?聲明數組:de…

    Linux干貨 2016-08-25
  • 定時任務的完成contab

    采用crontab來完成 利用crontab來定時執行任務大致有如下三步: 1、編寫shell腳本 2、利用crontab加入到定時任務隊列 3、查看作業完成情況 一、如何建立shell腳本 Linux下有很多不同的shell,但我們通常使用bash(bourne again shell)進行編程,因為bash是免費的并且很容易使用 程序必須以下面的行開始(…

    Linux干貨 2016-08-11
  • N25-第十三周博客作業

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程) 1)共享名為shared,工作組為magedu;2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;3)添加samba用戶gentoo,centos和ubu…

    Linux干貨 2017-04-19

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-03-30 13:58

    圖文并茂,不錯,還可以更好,加油。

欧美性久久久久