什麼是SSL,HTTPS是如何工作的
引言
我們大多數人每天都使用加密通訊,你可能不知道,甚至從每關心它。如你用百度搜索東西,你在阿里巴巴上買了一件喜歡的襯衫,HTTPS能防止你的資料在網路傳輸過程中不被其他人竊取。
在本部落格中,我們將介紹我們加密通訊背後的知識,主要內容包括:為什麼我們需要升級HTTP到HTTPS,HTTP的問題在哪裡?TSL和SSL探討,HTTPS是什麼?HTTPS是如何工作的?從黑客的角度如何攻擊HTTPS等。
HTTP的問題在哪裡?
如果你訪問一個網站默認了超文字傳輸協議(HTTP),其內容將明文傳輸。這意味著每個人在你和伺服器之間的位置都可以看到你與網站的每個互動內容。當用HTTP傳輸私人資訊(姓名,電子郵件,家庭住址,信用卡詳細資訊等),黑客可以輕易的從網路流量中擷取你傳送資訊,因為這些都是明文傳輸,下圖使用fiddle2模擬的擷取資訊。
這種攻擊方式就叫中間人攻擊,當然因為這個衍生出來的還有快取投毒,DDOS定向流向轉發等,這些不是本文重點,這個中間人存在你的客戶端和服務端的每個部分,例如,如果您連線到Wi-Fi熱點,則您和伺服器之間通過HTTP傳輸的所有內容將對熱點中的每個參與者都可見。(是不是非常可怕,這也是不要輕易連線免費Wi-Fi的原因!!!)
用專業的術語總結一下HTTP的問題: (1) 竊聽風險(eavesdropping):第三方可以獲知通訊內容。 (2) 篡改風險(tampering):第三方可以修改通訊內容。 (3) 冒充風險(pretending):第三方可以冒充他人身份參與通訊。 技術進步的一個源動力是解決問題,這個時候一種加密技術應運而生那就是SSL。
SSL探討
SSL,英文全稱Secure Sockets Layer,為Netscape所研發,用以保障在Internet上資料傳輸的安全,利用資料加密(Encryption)的技術,可確保資料在網路上的傳輸過程中不會被擷取及竊聽。SSL協議位於TCP/IP協議與各種應用層協議之間,為資料通訊提供安全支援。下面我深入探討下SSL 寫到這裡我毅然燃起了我對網景公司的情懷,其實網景公司不只發明了SSL,還發明瞭很多 Web 的基礎設施——比如“CSS 樣式表”和“JS 指令碼”
TSL和SSL的區別
我們來看看SSL的發明歷史,你就明白區別啦
- 1994年,NetScape公司設計了SSL協議(Secure Sockets Layer)的1.0版,但是未釋出。
- 1995年,NetScape公司釋出SSL 2.0版,很快發現有嚴重漏洞。
- 1996年,SSL 3.0版問世,得到大規模應用。
- 1999年,網際網路標準化組織ISOC接替NetScape公司,釋出了SSL的升級版TLS 1.0版。
- 2006年和2008年,TLS進行了兩次升級,分別為TLS 1.1版和TLS 1.2版。最新的變動是2011年TLS 1.2的修訂版。
很明顯TLS就是SSL的升級版,那麼它都升級哪些東西
- 1 版本號:TLS記錄格式與SSL記錄格式相同,但版本號的值不同,TLS的版本1.0使用的版本號為SSLv3.1。
- 2 報文鑑別碼:SSLv3.0和TLS的MAC演算法及MAC計算的範圍不同。TLS使用了RFC-2104定義的HMAC演算法。SSLv3.0使用了相似的演算法,兩者差別在於SSLv3.0中,填充位元組與金鑰之間採用的是連線運算,而HMAC演算法採用的是異或運算。但是兩者的安全程度是相同的。
- 3 偽隨機函式:TLS使用了稱為PRF的偽隨機函式來將金鑰擴充套件成資料塊,是更安全的方式。
- 4 報警程式碼:TLS支援幾乎所有的SSLv3.0報警程式碼,而且TLS還補充定義了很多報警程式碼,如解密失敗(decryption_failed)、記錄溢位(record_overflow)、未知CA(unknown_ca)、拒絕訪問(access_denied)等。
- 5 密文族和客戶證書:SSLv3.0和TLS存在少量差別,即TLS不支援Fortezza金鑰交換、加密演算法和客戶證書。
- 6 certificate_verify和finished訊息:SSLv3.0和TLS在用certificate_verify和finished訊息計算MD5和SHA-1雜湊碼時,計算的輸入有少許差別,但安全性相當。
- 7 加密計算:TLS與SSLv3.0在計算主密值(master secret)時採用的方式不同。
- 8 填充:使用者資料加密之前需要增加的填充位元組。在SSL中,填充後的資料長度要達到密文塊長度的最小整數倍。而在TLS中,填充後的資料長度可以是密文塊長度的任意整數倍(但填充的最大長度為255位元組),這種方式可以防止基於對報文長度進行分析的攻擊。
總而言之一句話:TLS比SSL更加標準化,更加安全
HTTPS探討
HTTPS 相當於是“HTTP over SSL”。舉個簡單的例子, SSL就像你家自來水管道外面的一個防護膜。
HTTPS是如何工作的
注意因為篇幅原因,此處所探討的只是HTTPS單向鑑別的實現。比方說,你要連線到taobao.com。您在瀏覽器中鍵入地址,按回車並在毫秒內轉到請求的網站。看起來很簡單,對吧?但是實際上後臺經過的數次的轉發,我們在這裡只討論HTTPS建立單向連線的那部分。 具體的步驟如下:
- 1.你的瀏覽器請伺服器傳送建立連線訊息,訊息中包含加密演算法,是使用的協議等。
- 2.伺服器對你的瀏覽器迴應一個訊息,訊息中包含證書資訊,然後你可以對證書的真偽進行驗證。
- 3.驗證通過之後,如果一切都按預期(即伺服器已經成功驗證),瀏覽器開始傳送交換(和同意)應該用於此會話的隨機金鑰。
- 4.伺服器接收到到隨機祕鑰,然後開始進行資料交換。最終網頁的內容安全地傳輸並顯示在您的瀏覽器中。
可能你對上面的步驟依然存在疑惑,下面我們一起去解開它。首先證書是啥?其次證書如何校驗真偽,在步驟3中,客戶端像服務端傳送的資訊如何加密的?
電子證書是什麼
假設你要和張三做生意,然後這個時候你不信任張三怎麼辦,你敢不敢貿然把貨款打給他,答案肯定是否定的,這個找個信得過的中間人,有中間人開一份檔案,有中間人李四的名義擔保張三的人品信譽沒問題,這個時候開的這個檔案就叫證書(digital certificate)。 在上面的比喻中,你就是瀏覽器,張三就是伺服器,中間人李四就是認證中心CA(Certificate Authority),上面說了CA必須是“信得過的,德高望重的”,並不是每家機構都夠資格頒發證書的。國內目前有34家CA搜尋,下面列舉幾個
- 中國電信認證中心(CTCA)
- 海關認證中心(SCCA)
- 國家外貿部EDI中心建立的國富安CA安全認證中心
- 廣東電子商務認證中心(以後稱廣東CA)為首的“網證通”認證體系
- SHECA(上海CA)為首的UCA協卡認證體系。
如果你是服務商,首先你要像認證中心申請,然後認證中心給你頒發(當然了是收費的,而且還有期限),一旦頒發成功,你的瀏覽器展示就是這樣的 一些沒有經過證書的網站,或者需要自己預裝證書的網站
如何檢視自己電腦上的證書? 1.windows 系統按 Win + R 鍵開啟執行命令視窗,直接輸入 certmgr.msc,就可以看到了,如下圖所示: 2.也可以從瀏覽器中檢視:工具->Internet選項->內容->證書電子證書有哪些部分組成?
主體部分包括:
- 版本號:指出該證書使用了哪種版本的X.509標準(版本1、版本2或是版本3),版本號會影響證書中的一些特定資訊,目前的版本為3
- 序列號: 標識證書的唯一整數,由證書頒發者分配的本證書的唯一識別符號
- 簽名演算法識別符號: 用於簽證書的演算法標識,由物件識別符號加上相關的引數組成,用於說明本證書所用的數字簽名演算法。例如,SHA-1和RSA的物件識別符號就用來說明該數字簽名是利用RSA對SHA-1雜湊加密
- 認證機構的數字簽名:這是使用釋出者私鑰生成的簽名,以確保這個證書在發放之後沒有被撰改過
- 認證機構: 證書頒發者的可識別名(DN),是簽發該證書的實體唯一的CA的X.500名字。使用該證書意味著信任簽發證書的實體。(注意:在某些情況下,比如根或頂級CA證書,釋出者自己簽發證書)
- 有效期限: 證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效
- 主題資訊:證書持有人唯一的識別符號(或稱DN-distinguished name)這個名字在 Internet上應該是唯一的
- 公鑰資訊: 包括證書持有人的公鑰、演算法(指明金鑰屬於哪種密碼系統)的識別符號和其他相關的金鑰引數
- 頒發者唯一識別符號:識別符號—證書頒發者的唯一識別符號,僅在版本2和版本3中有要求,屬於可選項
擴充套件部分包括:
- 發行者金鑰識別符號:證書所含金鑰的唯一識別符號,用來區分同一證書擁有者的多對金鑰。
- 金鑰使用:一個位元串,指明(限定)證書的公鑰可以完成的功能或服務,如:證書籤名、資料加密等。如果某一證書將 KeyUsage 擴充套件標記為“極重要”,而且設定為“keyCertSign”,則在 SSL 通訊期間該證書出現時將被拒絕,因為該證書擴充套件表示相關私鑰應只用於簽寫證書,而不應該用於 SSL。
- CRL分佈點:指明CRL的分佈地點
- 私鑰的使用期:指明證書中與公鑰相聯絡的私鑰的使用期限,它也有Not Before和Not After組成。若此項不存在時,公私鑰的使用期是一樣的。
- 證書策略:由物件識別符號和限定符組成,這些物件識別符號說明證書的頒發和使用策略有關。
- 策略對映:表明兩個CA域之間的一個或多個策略物件識別符號的等價關係,僅在CA證書裡存在
- 主體別名:指出證書擁有者的別名,如電子郵件地址、IP地址等,別名是和DN繫結在一起的。
- 頒發者別名:指出證書頒發者的別名,如電子郵件地址、IP地址等,但頒發者的DN必須出現在證書的頒發者欄位。
- 主體目錄屬性:指出證書擁有者的一系列屬性。可以使用這一項來傳遞訪問控制資訊。
例如我伯大的證書: 證書的信任鏈最後的補充說明 1.瀏覽器對伺服器的認證取決於兩點:1,瀏覽器對中間人CA的信任(信任傳遞),2,伺服器自身採用公私鑰加密協議並對外公佈公鑰。 2.為什麼建立連線之後開始使用隨機對稱祕鑰加密?因為對稱祕鑰快! 3.為什麼HTTPS的普及率不夠高?1.因為HTTPS相比HTTP慢!2.因為CA的證書收費!
總結
本文主要闡述了HTTPS的工作原理,介紹了證書的相關概念,在後續的文章中,我會以實際的專案環境配置(如nginx如何配置HTTPS,Tomcat如何配置HTTPS等)來進行分析。
宣告
本文35%為翻譯組合,65%為原創