PS:原文首發於微信公衆號:躬行之(jzman-blog)算法
最近交流羣裏有人問 HTTPS 相關的知識,雖然會用,可是卻只知其一;不知其二,今天專門來總結一些 HTTPS 相關的知識點,這一篇主要是相關理論知識,下一篇寫個案例實踐一下,主要內容以下:瀏覽器
HTTP 的缺點以下:安全
簡單來講,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),這種方式就是加密和解密使用相同的密鑰,在通訊時還需將傳輸密鑰給對方用來解密,密鑰傳輸過程當中一樣可能被截獲,因此這種加密方式通訊安全的前提是如何安全的傳輸密鑰,圖示以下:app
這種方式又被稱之爲公開密鑰加密,使用一對非對稱的密鑰,一把叫作公開密鑰(public key),一把叫作私有密鑰(private key),其中公開密鑰能夠隨意發送,私有密鑰必須保密。網站
發送密文的一方要使用對方的公開密鑰進行加密,對方收到信息以後,使用本身的私有密鑰進行解密,這種方式不須要傳輸用來解密的私鑰了,也就沒必要擔憂私鑰被截獲,圖示以下:加密
因爲原來的 HTTP 直接與 TCP 通訊,因爲 TCP/IP 協議族的工做機制,使得通訊內容在傳輸鏈路上都有可能被竊聽,顧名思義,互聯網是由能鏈接到全世界的網絡組成,通訊線路上的通訊設備不全是私有的,這也使得通訊不安全,由此 HTTPS 誕生,那麼 HTTPS 是如何加密的呢?spa
Https採用混合加密機制,若是密鑰可以保證安全交換,那麼全程有可能僅使用對稱密鑰加密來進行通訊,若是不能保證密鑰安全交換,可在密鑰交換環節使用非對稱加密方式,以後使用對稱加密方式。這樣作的目的是由於對稱密鑰加密相較非對稱祕鑰加密處理速度更快。
可是加密了就安全了嗎,就不會被竊聽了嗎?實際上,即便通訊被加密,通訊內容仍是能夠被技術手段竊聽到,可是通訊加密後就不容易看懂具體的報文信息了,至關於達到了加密的目的。
HTTPS 加密傳輸過程當中須要傳輸公開密鑰,那麼公開密鑰又是如何保證其正確性呢,固然是數字認證機構頒發的公開密鑰證書。
這裏要提到數字認證機構(CA,Certificate Authority)和其相關機關頒發的公開密鑰證書,數字證書認證機構處於客戶端與服務器雙方均可信賴的第三方機構的立場上,其具體的業務流程以下:
具體業務流程以下圖所示:
第三步中,爲了保證數字認證機構的公開密鑰安全傳輸到客戶端,大多數瀏覽器開發商發佈瀏覽器版本時都會將經常使用認證機構的公開密鑰內置在瀏覽器中。
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 因爲使用了 SSL(包括 TLS) 而變得安全可靠,可是 SSL 因爲要進行加密處理會致使整個通訊變慢,頻繁的加密、解密會消耗服務端和客戶端的硬件資源。
SSL 不只會致使通訊慢,還會因爲大量消耗 CPU 和內存等資源,致使整個處理速度變慢,和 HTTP 相比,網絡負載可能可能會變慢 2 到 100 倍,以下圖所示:
若是使用了 HTTPS,那就意味着要增長硬件成本,此外從數字認證機構購買證書也是須要開銷的。
以上就是致使 HTTPS 雖然安全可靠,可是大多數網站仍是使用 HTTP 的緣由。