SSL、證書是什麼?

一直對這兩個概念比較模糊,百度到的相關介紹普遍寫的比較複雜,這裏希望利用我的理解,簡單的介紹下證書和SSL究竟是什麼。
水平有限,僅作學習總結和交流,如有錯誤,歡迎指正。

1.SSL和證書

  • SSL( Secure SocketLayer)
    是保證服務器和客戶端安全通信的一種協議。簡單來說,就是對傳輸信息進行加解密保證安全的協議。HTTP報文通過SSL的加解密變成了安全的HTTPS。
  • 證書
    可以簡單看成網站在網絡中的身份證,每次訪問某個網站時,其實我們都對會檢查它的身份證是否可靠。

證書除了驗證身份可靠外,還參與了SSL會話建立的過程。我們下面講一下這個過程,你就明白證書和SSL到底是什麼了。

2.SSL協議會話建立過程

描述過程前先了解兩個概念:

  • 對稱加密
    客戶端和服務端都有同一個密匙,傳輸的數據在一端用密匙加密後,傳到另外一端再用同樣的密匙進行解密。
  • 非對稱加密
    有兩個密匙:公匙和私匙。公匙加密的數據只有私匙可以解密。同樣,私匙加密的數據只有公匙可以解密。公匙可以公開傳給所有人,但私匙只能自己保有。

在瞭解加密的概念後,我們思考這麼一個問題:
爲了安全着想,HTTPS的報文傳輸肯定是需要加密的。那麼採用何種加密方式呢?

如果採用對稱加密的話,那麼密匙的分享是個大問題,總不能每個客戶端發出請求,服務端都把密匙明文發過去吧。這樣任何截取到密匙的黑客都可以解密你的所有對話了。

如果採用非對稱加密,每個客戶端發出請求時,服務端明文給它公匙,然後客戶端把用公匙加密後的數據發給服務端,服務端用私匙解密。這樣看來似乎不錯,但非對稱加密的效率是比較低的,考慮到通訊的頻繁,也不太適合。

這時候,我們就有了另外一個主意:能不能把兩種加密方式結合起來
首先,先採用非對稱加密的方式把對稱加密的密匙傳給對方,然後都知道對稱密匙的客戶端和服務端再採用對稱加密進行通訊。

這樣就完美解決了密匙傳播過程中被黑客截取的危險,因爲即使截取到了也是加了密的密匙,沒有卵用啊。這也就是ssl的原理了。下面我們通過圖來進一步瞭解整個過程。

在TCP/IP三次握手之後,會進行TLS(SSL 3.0的升級版)的握手來交換密匙。

這裏寫圖片描述

  1. Client hello
    首先,客戶端(瀏覽器)生成一個隨機數,並把自己支持的加密算法等信息傳給服務端
  2. Server hello
    服務端從收到的加密算法裏面選擇一個用作雙方通訊,然後也生成一個隨機數,並把自己的證書(包含公匙、網站地址、頒發機構等信息)、隨機數,選擇的加密算法一起發給客戶端。
  3. Client KeyExchange
    客戶端對服務端發來的證書進行認證,如果該證書頒發機構以及簽名等都是可靠的,那麼該服務端可以信任,可以繼續通訊。
    客戶端會生成一個48位的PreMaster Key,用證書裏面的公匙進行加密後發給服務端。
  4. Finish
    服務端用自己的私匙解密得出了PreMaster Key,再結合先前雙方生成的隨機數一起生成對稱密匙。同樣,客戶端也用這三個值生成對稱密匙。
    雙方接下來就可以用對稱密匙加解密進行通訊了。

這個過程我只寫了個大概,細節可以看:SSL協議會話建立過程解析

3.證書

最後,我們結合上面的內容,總結下證書到底是什麼。

我自己認爲,證書主要兩個作用:
1. 檢驗網站可靠性
一般的正規網站的證書都是由可靠機構頒發的,瀏覽器接受時都可以信任。而個人網站證書如果是自簽名證書,不是正規申請的,那瀏覽器接受時會有不受信任的警告。需要你手動點擊信任,將該證書添加到客戶端信任列表,纔可繼續通訊。
注意,上網時提示不信任的證書,不要輕易點確定,以防:中間人攻擊
2. 傳遞公匙
就如上面ssl的過程,服務器把證書傳給客戶端,同時也把證書中非對稱加密的公匙給了客戶端。這樣客戶端就可以用公匙加密信息給服務端,而且只有服務端看得懂了。

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