HTTPS那些事之HTTPS原理
楔子
網路安全是一個整體的事件,涉及到個人計算機的安全,協議的安全,傳輸數據的安全,以及軟體開發公司和網站的安全,單純的依靠一個HTTPS協議並不能解決所有的問題。希望通過今後一點一點的對安全相關的問題進行說明解釋,能讓更多人對網路安全有所了解,從而更安全的使用網路。
文章會比較長,暫時計劃分成三個部分:
第一部分主要描述HTTPS的原理;第二部分主要描述SSL證書驗證的過程與使用的一些注意事項;第三部分會呈現一些針對HTTPS攻擊的實例。
一、什麼是HTTPS
在說HTTPS之前先說說什麼是HTTP,HTTP就是我們平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全。為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,之後IETF對SSL 3.0進行了升級,於是出現了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實際上我們現在的HTTPS都是用的TLS協議,但是由於SSL出現的時間比較早,並且依舊被現在瀏覽器所支持,因此SSL依然是HTTPS的代名詞,但無論是TLS還是SSL都是上個世紀的事情,SSL最後一個版本是3.0,今後TLS將會繼承SSL優良血統繼續為我們進行加密服務。目前TLS的版本是1.2,定義在RFC 5246中,暫時還沒有被廣泛的使用。
對歷史感興趣的朋友可以參考鏈接,這裡有對TLS/SSL詳盡的敘述。
二、HTTPS到底安全嗎?
這個答案是肯定的,很安全。谷歌公司已經行動起來要大力推廣HTTPS的使用,在未來幾周,谷歌將對全球所有本地域名都啟用HTTPS,用戶只要在搜索前用Google帳號登錄,之後所有的搜索操作都將使用TLS協議加密,見:鏈接
三、HTTPS的工作原理
HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密鑰信息。TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH演算法。握手過程的簡單描述如下:
- 瀏覽器將自己支持的一套加密規則發送給網站。
- 網站從中選出一組加密演算法與HASH演算法,並將自己的身份信息以證書的形式發回給瀏覽器。證書裡面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。
- 獲得網站證書之後瀏覽器要做以下工作:
- 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄裡面會顯示一個小鎖頭,否則會給出證書不受信的提示。
- 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密鑰,並用證書中提供的公鑰加密。
- 使用約定好的HASH計算握手消息,並使用生成的隨機數對消息進行加密,最後將之前生成的所有信息發送給網站。
4. 網站接收瀏覽器發來的數據之後要做以下的操作:
- 使用自己的私鑰將信息解密取出密鑰,使用密鑰解密瀏覽器發來的握手消息,並驗證HASH是否與瀏覽器發來的一致。
- 使用密鑰加密一段握手消息,發送給瀏覽器。
5. 瀏覽器解密並計算握手消息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通信數據將由之前瀏覽器生成的隨機密鑰並利用對稱加密演算法進行加密。
這裡瀏覽器與網站互相發送加密的握手消息並驗證,目的是為了保證雙方都獲得了一致的密鑰,並且可以正常的加密解密數據,為後續真正數據的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH演算法如下:
- 非對稱加密演算法:RSA,DSA/DSS
- 對稱加密演算法:AES,RC4,3DES
- HASH演算法:MD5,SHA1,SHA256
其中非對稱加密演算法用於在握手過程中加密生成的密鑰,對稱加密演算法用於對真正傳輸的數據進行加密,而HASH演算法用於驗證數據的完整性。由於瀏覽器生成的密鑰是整個數據加密的關鍵,因此在傳輸的時候使用了非對稱加密演算法對其加密。非對稱加密演算法會生成公鑰和私鑰,公鑰只能用於加密數據,因此可以隨意傳輸,而網站的私鑰用於對數據進行解密,所以網站都會非常小心的保管自己的私鑰,防止泄漏。
TLS握手過程中如果有任何錯誤,都會使加密連接斷開,從而阻止了隱私信息的傳輸。正是由於HTTPS非常的安全,攻擊者無法從中找到下手的地方,於是更多的是採用了假證書的手法來欺騙客戶端,從而獲取明文的信息,但是這些手段都可以被識別出來,我將在後續的文章進行講述。不過2010年還是有安全專家發現了TLS 1.0協議處理的一個漏洞:鏈接,實際上這種稱為BEAST的攻擊方式早在2002年就已經被安全專家發現,只是沒有公開而已。目前微軟和Google已經對此漏洞進行了修復。見:鏈接
HTTPS簡化版的工作原理也可以參見《對稱加密與非對稱加密 》。
原創地址:http://www.guokr.com/post/114121/
推薦閱讀:
※5173平台有哪些弊端?
※「罪與罰」,阿里「月餅事件」涉事員工到底該不該被開除?
※坤鵬論:揭秘網紅賺錢盈利的十大招數 沒有利益就沒有網紅
※如果讓你來做知乎的運營,你會怎麼做?為什麼?