Note

'18.03

3分鐘內了解Https

超過3分鐘的話麻煩用白金之星hold一下

對稱式加密與非對稱式加密

首先,先了解 Symmetric Encryption(對稱式加密)與 Asymmetric Encryption (非對稱式加密)這兩種東西。對稱式加密很簡單,就是用同一個key來加密/解密,就像你用同一把鑰匙打開/鎖上家裡的大門一樣。而非對稱式加密則是有兩個key,一個是Public key(公鑰,可以公開以不安全的方式流通)、另一個是Private key(私鑰,不能以不安全的方式公開流通)。這兩個key是一對的,加密的暗文只能被對方解開。相對於對稱式,非對稱式加密的消耗時間比較多。

阿用對稱加密不就好了,非對稱拿來幹嘛的?

因為你用來做對稱式加密的key在第一次傳送過程中會被看到,所以需要一個安全的方式傳輸你的Key。

非對稱加密在傳送公鑰時不是也有可能被掉包嗎?

對,這叫中間人攻擊,所以我們還需要一個機制來防範這件事,CA( Certificate Authority, 數位憑證認證機構)就是為此而誕生的。簡單來說,CA會簽發一張憑證讓你佈署在server上,內容是你的site的資訊,以及一個簽章;這個簽章是由你的site資訊經過hash後再由CA的私鑰加密而成的。client端在驗證憑證時,只要拿該憑證內的公鑰拆開得到hash,再拿憑證上的資訊hash看是否相同,即可看出憑證是否被竄改過。

快三分鐘了,所以具體步驟是?

client端發起Https request Server端返回CA發的憑證 Client端收到憑證,並驗證憑證是否可信,如果可信(或是使用者選擇相信)則隨機產生一段對稱式加密用的key(稱之為Key S好了),並且用憑證內的公鑰加密Key S,送給Server Server收到加密過的Key S,用自己的私鑰解密,並且回給Client一個ready的訊息 Client開始和Server用Key S做對稱式加密通訊

網路上已經一堆資料了,你還打這篇幹嘛?

為了在未來的某天迅速有效的喚醒我的金魚腦。・゚・(つд`゚)・゚・