淺析HTTPS與SSL原理

版權聲明:本文由盛曠 原創文章,轉載請註明出處: 
文章原文連接:https://www.qcloud.com/community/article/134html

來源:騰雲閣 https://www.qcloud.com/community算法

 

HTTPS是指結合HTTP和SSL來實現網絡瀏覽器和服務器之間的安全通訊。HTTPS被融合到當今網絡操做系統和網絡瀏覽器中,他依賴於網絡服務器是否支持HTTPS協議。本文重點是闡述HTTPS和SSL證書的原理,不涉及具體實現。在開始敘述原理以前,先明確幾個網絡安全方面的基礎概念。瀏覽器

一.基礎概念

1. 對稱加密算法

一個對稱加密算法由五個部分組成:安全

  • 明文:原始消息或數據服務器

  • 加密算法網絡

  • 密鑰加密

  • 密文:使用密鑰經過加密算法對明文計算後的結果spa

  • 解密算法:使用密文和相同密鑰經過解密算法產生原文
    操作系統

2. 非對稱加密算法

與對稱加密算法不一樣的是,非對稱加密算法使用的加密密鑰和解密密鑰是不一樣的。
htm

3. 公鑰密碼與RSA

公鑰密碼屬於對稱加密算法中的一種,公鑰密碼體系中有一個公鑰和一個密鑰,公鑰是公開給全部人使用的,密鑰只有本身知道,一般公鑰根據一個密鑰進行加密,根據另外一個密鑰進行解密。

RSA公鑰密碼算法是公鑰密碼算法中的一種,RSA中的加密和解密均可以使用公鑰或者私鑰,可是用公鑰加密的密文只能使用私鑰解密,用私鑰加密的密文智能使用公鑰解密。

二.SSL證書的原理

這裏只敘述SSL證書的原理,至於如何申請證書,如何生成證書,如何部署證書能夠Google獲得。在介紹SSL證書前,須要先知道證書的指紋和指紋算法。

指紋是在證書信息(證書機構,公司名,證書有效期等)後面加上一段內容,保證信息沒有被修改過。具體操做是將將原來的信息經過指紋算法算法(一個hash算法)計算獲得指紋與原信息一塊兒發出去。用戶收到這份數據後,首先將原信息用一樣的指紋算法計算結果,將獲得的結果與指紋對比,若是一致,則說明信息沒有被修改過。固然這個過程是有危險的,黑客徹底能夠修改內容並從新經過指紋算法生成指紋。這裏須要使用加密算法來解決這個隱患。

假設一個公司B company向證書機構xxx CA申請SSL證書,他會獲得一張相似下面這張圖的證書

B company獲得這張證書後,會在與用戶通訊的過程當中將證書發送給用戶,用戶首先會檢測辦法證書的機構,若是是你們都公認的證書機構,操做系統在出廠時會內置這個機構的機構信息和公鑰,例如xxx CA,若是是一個不受信任的證書機構,應用程序(好比瀏覽器)會發出警告,若是是受信任的證書機構,應用程序會使用預置的xxx CA的公鑰去解密最後的指紋內容和指紋算法,而後再把前面的證書內容用指紋算法計算後與指紋內容比對,因爲指紋內容是由證書機構惟一的私鑰加密的,所以只要比對成功說明證書是沒有人被人修改過的。接下來用戶就能夠放心使用該公司的公鑰了。

三.HTTPS的原理

HTTPS的出現是爲了解決網絡通訊中數據傳輸不安全的問題,下面咱們以登錄爲例,先看一個網絡通訊最簡單的過程,再一步步分析這個過程當中不安全的因素以及解決辦法。

1.最簡單的通訊過程

這個通訊過程槽點太多,這樣一個網絡通訊過程屬於小學生水準,首先最明顯一個錯誤是做爲客戶端如何知道給予迴應必定是目標服務器,黑客能夠有一百種辦法來假裝這個服務器,輕輕鬆鬆就拿到用戶的用戶名和密碼,因此圖中也只能無奈的使用「某個地址」來標識服務器。爲了解決這個問題,首先須要讓瀏覽器確認對方的身份,因而有了下面的通訊過程。

2.確認服務器身份

確認服務器身份就須要用到前面說過的RSA算法了,因爲RSA算法有下面這幾個特性,因此是能夠用來惟一確認服務器身份的:

  • 私鑰的惟一性

  • 私鑰的保密性(只有服務器知道這個私鑰)

  • 只能用公鑰解密用私鑰加密過的密文(對稱加密算法的特色)

其中「()」裏的內容是服務器用私鑰加密後的內容,通常服務器會將明文加密,瀏覽器在收到消息後首先會用公鑰解密密文,由前面特性3能夠知道,公鑰和解密算法是能夠解出明文的,若是解不出來講明對方不是目標服務器,瀏覽器解密後會與明文作比對,若是比對成功,由私鑰的惟一性和保密性就能夠確認對方是目標服務器。然而確認服務器身份後,在向服務器發送數據的過程當中,若是數據被黑客截獲,咱們的用戶名和密碼也會落入黑客之手,因而下一步咱們須要對發送的數據進行加密。

3.通訊內容加密

瀏覽器對用戶名和密碼用公鑰進行加密,因爲

  • 只能用私鑰解密用公鑰加密過的密文

因而密文只能由服務器用私鑰解密,黑客即便拿到密文,也是沒法解密的。可是在服務器向客戶返回信息的過程當中就出現問題了,因爲公鑰是公有的,任何人均可以拿到這份數據並使用公鑰解密,因此這裏仍是存在不安全因素。因而客戶和瀏覽器的通訊過程多了一個步驟。

4.使用用戶定義的對稱加密算法對信息加密

爲了使瀏覽器和服務器發出的信息都沒法被別人解密,這裏使用了一個對稱加密算法,而算法和密鑰的加密是在瀏覽器用公鑰來加密的,這樣能夠保證只有服務器才能用私鑰來解密這個內容,也就是保證對稱加密算法和密鑰只能被服務器拿到。當服務器拿到對稱加密算法和密鑰後,後面的通訊都能使用這個對稱加密算法來完成,因爲對稱加密算法和密鑰只有客戶和服務器知道,後面的通訊加密過程都是沒法被破解的。

到這裏,基本就是HTTPS通訊的整個過程了,彷佛整個過程都很難被黑客破解,可是注意到前面的全部過程都默認了一個前提,那就是客戶手裏已經擁有公鑰。公鑰的獲取若是隻是在客戶和服務器之間進行的話,是存在很大的安全隱患的,最直接的問題就是用戶怎麼肯定拿到的公鑰就是目標服務器的公鑰,相似「證實‘能證實你身份’的憑證是你的」這樣的命題,最好的解決辦法是引入一個你們都信任的第三方來「證實這個憑證」是服務器的,因而這裏就使用了SSL證書。前面提到,經過發送SSL證書服務器能夠將公鑰安全的交給用戶,而這裏的第三方就是證書機構。因而咱們獲得了一個完整的HTTPS通訊過程。

到這裏已經基本講完了SSL證書與HTTPS的原理,固然實際通訊過程當中還有不少細節沒有說到,可是不妨礙理解原理。實際開發和生產過程當中不少信息敏感的操做均可以參照這種思想來實現,文中有不合理的和錯誤的地方歡迎指正。

參考文章:
https://zh.wikipedia.org/wiki/%E5%82%B3%E8%BC%B8%E5%B1%A4%E5%AE%89%E5%85%A8%E5%8D%94%E8%AD%B0
http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

最後,歡迎申請使用騰訊雲的SSL證書 具體SSL證書使用方法參考

相關文章
相關標籤/搜索