初识http
初識HTTPS
HTTPS也被叫做“基于TLS的HTTP,基于SSL的HTTP,HTTP安全“,它是一個在Internet上廣泛使用的計算機網絡安全通信協議。
即HTTPS是HTTP的安全版本,在了解HTTPS為何安全之前,那么我們首先應該要知道HTTP為什么不安全。
HTTP為什么不安全
通過 HTTP 協議傳輸的信息是明文的。網絡包從客戶端/瀏覽器到服務器的這段過程中,需要經過多個網絡設備。我們的登錄帳號、密碼等信息可以輕易被其中任何一個網絡設備獲取。
如果其中的一個網絡設備被黑客控制,除了可以獲取我們發送的數據以外,還可以將我們發送的數據進行偽造后再進行發送。
這就是 HTTP 傳輸所面臨的問題之一:中間人攻擊,指消息傳遞的過程中,處在傳遞路徑上的攻擊者可以嗅探或者竊聽傳輸數據的內容。
HTTPS加密
HTTPS針對這個問題,采用了“加密”的方式來解決。
使用對稱加密算法(AES)
我們最先想到的應該就是對稱加密算法了,如果HTTPS使用的是對稱加密算法會是怎樣的情況呢?
對稱加密算法既指加密和解密需要使用的密鑰key是一樣的。
如果客戶端和服務端都有一個相同的密匙key,那么客戶端先使用密匙key加密數據之后再發送到服務端,此時中間人獲取到的數據是無法解密的。服務端使用key解密后,執行完畢返回同樣由該key加密的數據到客戶端。
整個過程看起來沒有問題,但是忽略了一個點,即密匙key如果是服務端生成的該如何告訴客戶端呢?實際上,無論采用什么樣的方式告訴客戶端,都有可能導致密匙key泄露,一旦密匙泄露,則整個加密的工作都顯得沒有意義了。
所以實際上HTTPS的加密并不是用的對稱加密算法這種方式。
使用非對稱加密算法(RSA)
HTTPS使用了另一種聰明的加密算法,非對稱加密算法。
非對稱加密算法會生成兩個密鑰(key1 和 key2)。凡是 key1 加密的數據,key1 自身不能解密,需要 key2 才能解密;凡事 key2 加密的數據,key2 自身不能解密,只有 key1 才能解密。
HTTPS實現
下面我們看看HTTPS中是如何使用RSA的:
這里也許你會有問題,為什么不直接用非對稱加密來加密信息,而是加密 AES 的 key 呢?
因為非對稱加密和解密的平均消耗時間比較長,為了節省時間提高效率,我們通常只是用它來交換密鑰,而非直接傳輸數據。
HTTPS證書
我們之前通過加密技術已經解決了消息安全傳遞的問題了,那么是不是從此就萬無一失了呢?答案當然不是。
我們設想一下,如果我們服務端(S)和客戶端(C)中間會途經一個黑客服務器,暫且就稱為H吧,下面我們看看H如何操作可以破解掉我們的加密防范。
這么看來,我們之前的努力貌似又功虧一簣了。
所以此時我們需要引入一個非常權威的第三方,一個專門用來認證網站合法性的組織,可以叫做 CA(Certificate Authority)。各個網站服務商可以向 CA 申請證書,使得他們在建立安全連接時可以帶上 CA 的簽名。而 CA 得安全性是由操作系統或者瀏覽器來認證的。
你的 Windows、Mac、Linux、Chrome、Safari 等會在安裝的時候帶上一個他們認為安全的 CA 證書列表,只有和你建立安全連接的網站帶有這些CA的簽名,操作系統和瀏覽器才會認為這個鏈接是安全的,否則就有可能遭到中間人攻擊。
一旦某個 CA 頒發的證書被用于的非法途徑,那么這個 CA 之前頒發過的所有證書都將被視為不安全的,這讓所有 CA 在頒發證書時都十分小心,所以 CA 證書在通常情況下是值得信任的。
總結
使 HTTP 后面增加一個S(Security)的技術,正是 對稱加密 + 非對稱加密 + CA 認證 這三種技術的混合體。當然這個主要是 HTTPS 的基本原理,真正實際中的 HTTPS 的協議是比以上的描述更為復雜一些的,并且其中任何一步稍有閃失,整個流程都將不再安全。
這也是為什么 HTTPS 協議從 SSL 1.0升級到 SSL 3.0,再被 TLS 1.0 現在被 TLS 1.3取代,其背后都是一個個細節上的優化,以防有任何閃失。
TLS 協議相比 SSL 協議增加了傳輸層的安全保證。
轉載于:https://www.cnblogs.com/SharkChilli/p/7989327.html
總結
- 上一篇: SQLite大批量插入性能优化
- 下一篇: 线程同步synchronized理解