HTTPS及加密算法,看這一篇就夠了

PS:堅持就是最大的超越。

最近交流羣裏有人問 HTTPS 相關的知識,雖然會用,但是卻一知半解,今天專門來總結一些 HTTPS 相關的知識點,這一篇主要是相關理論知識,下一篇寫個案例實踐一下,主要內容如下:

  1. HTTP的缺點
  2. 什麼是HTTPS
  3. 公開密鑰加密技術
  4. HTTPS加密傳輸
  5. 公開密鑰證書
  6. SSL和TLS
  7. 爲什麼不使用HTTPS

HTTP的缺點

HTTP 的缺點如下:

  1. 通信使用明文,傳輸內容可能被竊聽
  2. 不驗證後通信方的身份,容易僞裝進行請求
  3. 無法保證報文的完整性,可能遭遇篡改

什麼是HTTPS

簡單來說,HTTPS(HTTP Secure) 就是在 HTTP 協議基礎之上加入加密以及認證機制的 HTTP。

HTTPS 相較 HTTP 不是一種新協議,只是在 HTTP 通信接口部分使用了 SSL(Secure Socket Layer)和TLS(Transport Layer Security)協議來實現。使得 HTTP 先與 SSL 通信,再由 SSL 和 TCP 通信,而不是 HTTP 直接與 TCP 通信,HTTP 和 HTTPS 圖示如下:

公開密鑰加密技術

對稱密鑰加密和非對稱密鑰加密加密算法中加密算法時公開的,而密鑰時保密的,加密和解密都需要密鑰,沒有密鑰就不能解密,反之,如果密鑰被截獲,則加密的內容就有可能被破解。

  • 對稱密鑰加密

這種加密方式又被稱爲共享密鑰加密(Common key crypto system),這種方式就是加密和解密使用相同的密鑰,在通信時還需將傳輸密鑰給對方用來解密,密鑰傳輸過程中同樣可能被截獲,所以這種加密方式通信安全的前提是如何安全的傳輸密鑰,圖示如下:

  • 非對稱密鑰加密

這種方式又被稱之爲公開密鑰加密,使用一對非對稱的密鑰,一把叫做公開密鑰(public key),一把叫做私有密鑰(private key),其中公開密鑰可以隨意發送,私有密鑰必須保密。

發送密文的一方要使用對方的公開密鑰進行加密,對方收到信息之後,使用自己的私有密鑰進行解密,這種方式不需要傳輸用來解密的私鑰了,也就不必擔心私鑰被截獲,圖示如下:

HTTPS加密傳輸

由於原來的 HTTP 直接與 TCP 通信,由於 TCP/IP 協議族的工作機制,使得通信內容在傳輸鏈路上都有可能被竊聽,顧名思義,互聯網是由能連接到全世界的網絡組成,通信線路上的通信設備不全是私有的,這也使得通信不安全,由此 HTTPS 誕生,那麼 HTTPS 是如何加密的呢?

Https採用混合加密機制,如果密鑰能夠保證安全交換,那麼全程有可能僅使用對稱密鑰加密來進行通信,如果不能保證密鑰安全交換,可在密鑰交換環節使用非對稱加密方式,之後使用對稱加密方式。這樣做的目的是因爲對稱密鑰加密相較非對稱祕鑰加密處理速度更快。

但是加密了就安全了嗎,就不會被竊聽了嗎?實際上,即使通信被加密,通信內容還是可以被技術手段竊聽到,但是通信加密後就不容易看懂具體的報文信息了,相當於達到了加密的目的。

HTTPS 加密傳輸過程中需要傳輸公開密鑰,那麼公開密鑰又是如何保證其正確性呢,當然是數字認證機構頒發的公開密鑰證書。

公開密鑰證書

這裏要提到數字認證機構(CA,Certificate Authority)和其相關機關頒發的公開密鑰證書,數字證書認證機構處於客戶端與服務器雙方都可信賴的第三方機構的立場上,其具體的業務流程如下:

  1. 服務器運營人員向數字證書認證機構提出公開祕鑰的申請;
  2. 數字證書認證機構判明身份之後,會對已申請的公開密鑰做數字簽名,並將該公開密鑰放入公鑰證書後綁定在一起,服務器會將這份由數字認證機構頒發的公鑰證書發送給客戶端;
  3. 客戶端獲取到數字認證機構頒發的公開密鑰後,對其進行數字簽名驗證,一是確認公開密鑰是真實的數字認證機構頒發的,二是確認公開密鑰的值得信賴的;
  4. 確認無誤後,使用該公開密鑰加密報文;
  5. 服務器使用私有密鑰進行報文解密。

具體業務流程如下圖所示:

第三步中,爲了保證數字認證機構的公開密鑰安全傳輸到客戶端,大多數瀏覽器開發商發佈瀏覽器版本時都會將常用認證機構的公開密鑰內置在瀏覽器中。

SSL和TLS

HTTPS 使用 SSL(Secure Socket Layer) 和 TLS(Transport Layer Security)這兩個協議,SSL 技術最初是由瀏覽器開發商網景通信公司率先倡導的,開發 過 SSL3.0 之前的版本。目前主導權已轉移到 IETF(Internet Engineering Task Force,Internet 工程任務組)的手中。

IETF 以 SSL3.0 爲基準,後又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL 爲原型開發的協議,有時會統一稱該協議 爲 SSL。當前主流的版本是 SSL3.0 和 TLS1.0。

SSL 和 TLS 實際上可以理解爲 TLS 是 SSL 的升級版本,TLS 基於 SSL,至於兩者的具體區別還是留給專業人士,這裏順便普及一下 SSL 和 TLS 的相關背景。

爲什麼不使用HTTPS

HTTPS 由於使用了 SSL(包括 TLS) 而變得安全可靠,但是 SSL 由於要進行加密處理會導致整個通信變慢,頻繁的加密、解密會消耗服務端和客戶端的硬件資源。

SSL 不僅會導致通信慢,還會由於大量消耗 CPU 和內存等資源,導致整個處理速度變慢,和 HTTP 相比,網絡負載可能可能會變慢 2 到 100 倍,如下圖所示:

如果使用了 HTTPS,那就意味着要增加硬件成本,此外從數字認證機構購買證書也是需要開銷的。

以上就是導致 HTTPS 雖然安全可靠,但是大多數網站還是使用 HTTP 的原因。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章