SSL/TLS協議提供的服務主要有:
- 認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
- 加密數據以防止數據中途被竊取;
- 維護數據的完整性,確保數據在傳輸過程中不被改變。
Step 1:
CA發行其公鑰(public key)給所有的主要瀏覽器供應商. CA通常是一個組織/機構, 其負責為想要使用SSL通訊的網站簽署SSL憑證. 常見的如Symantec(賽門鐵克) , Geotrust等. CA們會運用其公鑰基礎建設去透過密碼學機制替各種有需求的domain進行憑證的簽署. 每個CA都會有其自己的key pair(如非對稱式加密的公私鑰對) , 其中, 公鑰是對所有人公開的.
Step 2:
對於瀏覽器廠商來說, 如Mozilla, Google, Microsoft, Apple等, 其必須確認自己做的瀏覽器(這邊僅指有在市場上公開的)有所有CA的公鑰的副本(跟瀏覽器軟體綁在一起). 這對於瀏覽器去驗證一個被特定CA簽署過的憑證來說是必要的. 這些公鑰通常是以公開憑證(public certificate)或是根憑證(root certificate)的方式供外界使用.
Step 3:
當你有自己的網站且你想要為你的網站啟用SSL通訊, 你就會需要經過這一個步驟. 你必須找到一個CA並且給他們送出要求協助簽署簽章請求. 這個請求通常會要你填很多必要的欄位以驗證你作為這個網站的所有人的身份.
Step 4:
當收到一個新憑證的簽署請求之後, CA按照程序簽完之後, 一個數位簽章(digital signature)就出現. 數位簽章可以看成是”被私鑰加密過的某個東西的checksum” . 在這邊的例子中, CA會計算憑證的checksum然後用其自身的私鑰(只有這個CA知道自己的私鑰是什麼)去對這個checksum進行加密. 在收到CA簽完的簽章之後, 網站的系統管理者就可以把這個簽章加到server的config裡面.
Step 5:
從這裡開始, 就有使用者的介入. 當某個人想要存取在server上的網站時, 這個人用的瀏覽器就會初始化一個SSL連接.
Step 6 & 7:
Server根據domain/website回覆給瀏覽器SSL憑證, 然後瀏覽器會從憑證中讀取CA的資訊, 並且試著從瀏覽器的cert store中找出該CA的公鑰(前面提過瀏覽器自身會跟CA的公鑰綁在一起, 若這邊的CA很冷門或是沒人知道, 那就會無法取得相應的公鑰了). 找到該CA的公鑰後, 就以此公鑰去解密該憑證以取得checksum string. 瀏覽器同樣會以收到的憑證為基礎來計算其checksum並且將這個計算結果與剛才利用CA公鑰解出來的checksum做比較. 若比較結果是匹配的, 這個驗證過程就被認為是成功的, 然後你就會在瀏覽器上面看到綠色鎖頭. 反之, 你會看到紅色叉叉的鎖頭, 表示有問題
截自:那些關於SSL/TLS的二三事(二) — How SSL works?

