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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

更安全的Web通信HTTPS

發布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 更安全的Web通信HTTPS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. HTTP協議存在的問題

閱讀本篇需要對HTTP協議有最基本的了解。 借用《圖解密碼技術》里的圖片,我們以如下一個購物場景開始介紹:

在網購過程中,如果使用純粹的HTTP協議,那么用戶的賬號密碼,信用卡,銀行卡信息都將在信息傳輸過程中直接裸奔。從例子中我們可以看到信用卡信息直接被明文傳輸了。除了明文傳輸之外,還存在著以下兩個問題:

  • 無法驗證通信方身份的真實性,即無法確認對方是否是真正的商家。
  • 無法確認信息是否被篡改,即無法確認傳輸過程信用卡信息和收貨地址是否被篡改過。
  • 常規情況下,可以對通信的內容進行加密,來避免明文傳輸的問題。但是單靠這點,無法解決信息完整性和認證問題。為了解決這些問題,需要對通信進行加密。也就引入了 HTTPS 。

    2. HTTPS結構

    2.1 HTTPS與HTTP

    HTTPS 本身并不是一個協議,它使用 SSL/TLS 作為對通信加密的協議,承載 HTTP ,將兩種協議疊加,來實現對 HTTP 通信進行加密的目的。二者的關系為 HTTP 加密 認證 完整性保護=HTTPS 單純從層次上對比二者的差異為:

    即在 HTTP 協議下又加了一層 SSL,計算機網絡通信過程的信息流動方向是發送方信息由上到下進行包裝,然后接收方將信息由下到上進行解包。上述的購物場景,如果使用了 SSL/TLS 承載 HTTP,那么通信的流程將會變化成如下圖: 無論是客戶端,還是服務端,消息發送的時候,都是從上往下,經過了 SSL/TLS 加密,然后接收的時候再由下往上解密。

    看到這里你可能對流程已經有所理解,但又存在疑惑: SSL/TLS 是什么東西?

    2.2 SSL/TLS

    SSL(Secure Socket Layer),稱為安全套接層,是1994年網景公司設計的一種安全協議,用于解決了網絡通信安全和數據完整性問題。第一個版本的TLS(Transport Layer Security) 是在 SSL3.0基礎上設計的,可以理解為 SSL 3.1。后續的 TLS 版本又加入了更多特性,可以把它理解為是 SSL 的升級版。

    2.3 SSL/TLS 位于哪一層?

    目前普遍的說法是 SSL/TLS 無法確切地被劃分到 OSI 或者 TCP/IP 的具體某一層。從邏輯上來講,SSL/TLS 的加密功能正好能和 OSI的表示層相對應,但是一些應用程序會把它當做傳輸層。所以比較保守的說法是SSL/TLS介于傳輸層和應用層之間

    2.4 TLS結構簡介

    SSL/TLS 不僅可以承載 HTTP,也可以承載其他應用層協議。

    協議本身可以分成兩層,上層是握手協議,下層是記錄協議。如下圖:

    上層又分成了4個子協議,其中第一個握手協議是最重要的,它的作用是確認雙方使用的密碼套件,雙方共享密鑰,基于證書的認證操作。 其他三個子協議的作用分別是:

    • 密碼規則更變協議:通知對方要交換密碼了
    • 警告協議:把錯誤信息傳給對方
    • 應用數據協議:將承載的數據傳達給對方

    記錄協議位于下層,它的作用是使用對稱加密的方式對消息進行加密通信,過程可以再進一步細分為:

  • 將消息分割成多個片段,每個片段進行壓縮。
  • 壓縮后的片段,加上消息認證碼,用于保證完整性,并進行數據認證。消息認證碼的密鑰在握手結束后可以生成,下面會介紹。
  • 上面生成的東西,通過對稱加密,加密使用CBC模式,而CBC模式的初始化向量,以及對稱加密的密鑰,都可以在握手完成,通過主密碼生成,下面會介紹。
  • 經過上面加密之后,再加上一個報頭,就是最后的報文數據了。這個報頭由數據類型,版本號,壓縮后的長度組成。其中數據類型是上層握手協議的4個子協議之一。
  • HTTPS握手過程

    我們知道 HTTP 是基于 TCP 來完成的,TCP有握手過程,HTTPS同樣也有握手過程。當我們談論 HTTPS的時候,其實更側重的是談論 SSL。

    默認情況下 HTTP 通信,客戶端會打開一條到服務器端口80的連接。而 HTTPS 則會打開一條到服務器端口443的連接。 TCP 連接建立后,會初始化 SSL,溝通加密參數,交換密鑰,完成握手過程后,SSL 初始化完成。然后就可以加密通信了。

    我們在談論HTTPS握手過程,其實就是SSL的握手過程。這個握手過程分成4個部分。下面將詳細地解析這4個部分。

    一: 客戶端 -> 服務端

    客戶端向服務端發送Client Hello,告訴服務端它能理解的密碼套件(RSA/3DES等),壓縮方式,會話id,當前時間,SSL/TLS 協議的可用版本,客戶端隨機數。

    二: 服務端 -> 客戶端

  • 服務端向客戶端發送Server Hello。
  • 服務端發送Certificate,以及把證書清單發給客戶端,里面包含了公開密鑰的證書。
  • Certificate不足以滿足需求的時候,還會發送 ServerKeyExchange,告訴客戶端使用這些信息來進行密鑰交換。
  • 服務端向客戶端發送CertificateRequest消息,發送了服務端能理解的證書類型清單和能理解的的認證機構名稱清單。
  • ServerHelloDone
  • 三: 客戶端 -> 服務端

  • 如果收到 CertificateRequest,會向服務端發送Certificate消息,以及發送自己的證書。
  • 發送 ClientKeyExchange以及經過加密的預備主密碼(隨機數)。這個報文是經過加密的,加密的公鑰就是服務端發送Certificate時,發給客戶端的公鑰。
  • 如果收到 CertificateRequest,還會發送 certificateVerify消息,告訴服務端它就時客戶端證書的持有者本人。
  • 客戶端發送changeCipherSpec消息,告訴服務端要切換密碼了(實際上這個是密碼規則更變協議里的東西)。服務端收到這個消息后,雙方同時切換密碼
  • 客戶端發送 Finished (這時候客戶端使用已經切換后的密碼套件來發送)
  • 四: 服務端 -> 客戶端

  • 服務端發送 changeCipherSpec,告訴客戶度要切換密碼了
  • 服務端發送 Finished 表示結束。 然后就切換到了應用數據協議。之后雙方使用應用數據協議和TLS記錄協議來進行密碼通信。
  • 握手過程一共完成的工作有:

  • 客戶端獲得服務端的合法公鑰(第二部分第二點),完成服務端認證。
  • 服務端獲得客戶端的合法公鑰(第三部分第一點),完成客戶端認證。
  • 雙端生成通信中對稱加密的共享密鑰。
  • 雙端生成消息認證中的共享密鑰。
  • HTTPS 采用了混合加密機制。在握手環節使用公鑰加密方式。通信建立后,交換報文時,使用共享密鑰加密,也就是上面第3和第4點。對稱加密會比非對稱加密快很多,提高通信過程的效率。共享密鑰的生成過程,可以從這張圖中去理解。

    客戶端和服務端可以擁有一樣的預備主密碼,在握手的開始階段,雙方協商了共同使用什么密碼套件。預備主密碼同時使用由密碼套件中兩個單向散列函數(MD5和SHA-1)組合的偽隨機數生成器,生成主密碼(客戶端的預備主密碼也是使用偽隨機數生成)。兩端都會根據這個一樣的預備主密碼,計算出一樣的主密碼。然后再由一樣的主密碼,生成下面三個:

    • 用于對稱加密的密鑰
    • 消息認證碼的密鑰
    • 對稱密碼的CBC模式中使用的初始化向量

    每一樣都有兩份,即客戶端發往服務端,和服務端發往客戶端。所以主密碼一共可以生成6種信息。

    以上就是HTTPS握手過程的詳細解析。握手建立完成后,客戶端和服務端有擁有對稱加密的密鑰,那么就可以使用這個密鑰對通信內容進行加密了。

    HTTPS相對于HTTP有什么不一樣?

    總結一下,HTTPS多做了什么,它和HTTP有什么不一樣。

    • HTTP是明文傳輸,HTTPS是加密傳輸
    • HTTPS需要申請證書,有一定成本
    • HTTP使用80端口,HTTPS使用443端口
    • HTTP沒有身份認證,HTTPS有身份認證
    • HTTP報文完整性無法驗證,可能被篡改。HTTPS可以驗證。

    參考資料

    圖解密碼技術

    圖解HTTP

    HTTP權威指南

    Transport Layer Security

    總結

    以上是生活随笔為你收集整理的更安全的Web通信HTTPS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。