HTTPS在傳輸數據以前須要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程當中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不單單是一套加密傳輸的協議,更是一件通過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及摘要算法。握手過程的簡單描述以下:算法
1.瀏覽器將本身支持的一套加密規則發送給網站。瀏覽器
2.網站從中選出一組加密算法與摘要算法,並將本身的身份信息以證書的形式發回給瀏覽器。證書裏面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。安全
3.得到網站證書以後瀏覽器要作如下工做:
a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),若是證書受信任,則瀏覽器欄裏面會顯示一個小鎖頭,不然會給出證書不受信的提示。
b) 若是證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。
c) 使用約定好的摘要計算握手消息,並使用生成的隨機數對消息進行加密,最後將以前生成的全部信息發送給網站。測試
4.網站接收瀏覽器發來的數據以後要作如下的操做:
a) 使用本身的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,並驗證摘要是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手消息,發送給瀏覽器。網站
5.瀏覽器解密並計算握手消息的摘要,若是與服務端發來的摘要一致,此時握手過程結束,以後全部的通訊數據將由以前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。
這裏瀏覽器與網站互相發送加密的握手消息並驗證,目的是爲了保證雙方都得到了一致的密碼,而且能夠正常的加密解密數據,爲後續真正數據的傳輸作一次測試。另外,HTTPS通常使用的加密與摘要算法以下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
摘要算法:MD5,SHA1,SHA256
其中非對稱加密算法用於在握手過程當中加密生成的密碼,對稱加密算法用於對真正傳輸的數據進行加密,而摘要算法用於驗證數據的完整性。因爲瀏覽器生成的密碼是整個數據加密的關鍵,所以在傳輸的時候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰只能用於加密數據,所以能夠隨意傳輸,而網站的私鑰用於對數據進行解密,因此網站都會很是當心的保管本身的私鑰,防止泄漏。加密
TLS握手過程當中若是有任何錯誤,都會使加密鏈接斷開,從而阻止了隱私信息的傳輸。正是因爲HTTPS很是的安全,攻擊者沒法從中找到下手的地方,因而更多的是採用了假證書的手法來欺騙客戶端,從而獲取明文的信息,可是這些手段均可以被識別出來。spa