html
HTTPS科普掃盲帖segmentfault
HTTPS小結瀏覽器
HTTP是明文傳輸未加密,安全性差,HTTPS(HTTP + SSL)數據傳輸是加密的,安全性較好安全
HTTPS協議須要到CS申請——收費服務器
HTTP頁面響應速度比HTTPS快,主要是由於 HTTP 使用 TCP 三次握手創建鏈接,客戶端和服務器須要交換 3 個包,而 HTTPS除了 TCP 的三個包,還要加上 ssl 握手須要的 9 個包,因此一共是 12 個包。 測試
默認端口不一樣網站
HTTPS 其實就是建構在 SSL/TLS 之上的 HTTP 協議,因此,要比較 HTTPS 比 HTTP 要更耗費服務器資源。ui
HTTPS = HTTP + 加密 + 認證 + 完整性保護加密
HTTPS 經由 HTTP 進行通訊,可是利用SSL/TLS來進行加密數據包。
SSL 提供 加密處理 和 認證 以及 摘要功能
HTTPS開發的主要目的,是提供對網站服務器的身份認證,保護交換數據的隱私與完整性。
通常,HTTP是與TCP直接通訊,如今使用SSL,HTTP先與SSL通訊,SSL和TCP通訊。
通俗的講,TLS、SSL實際上是相似的東西,SSL是個加密套件,負責對HTTP的數據進行加密。TLS是SSL的升級版。如今提到HTTPS,加密套件基本指的是TLS。
SSL 是獨立於 HTTP 的協議, 因此不光是 HTTP 協議, 其餘運行在應用層的 SMTP和 Telnet 等協議都可配合 SSL 協議使用。
傳輸流程:原先是應用層將數據直接給到TCP進行傳輸,如今改爲應用層將數據給到TLS/SSL,將數據加密後,再給到TCP進行傳輸。如圖:
HTTPS 默認工做在 TCP 協議443端口,它的工做流程通常如如下方式:
服務端的配置 ,客戶端驗證服務器數字證書(這套證書其實就是一對公鑰和私鑰 )
傳送證書,這個證書就是公鑰,其中包含了證書的頒佈機構,過時時間等
客戶端解析證書,這個部分的工做是客戶端的TLS來完成的,首先會驗證公鑰是否有效,好比頒發機構,過時時間等,若是發現異常,則會彈出一個警告框,提示證書存在問題。
若是證書沒有問題,那麼就生成一個隨機值,而後用證書對改隨機值進行加密
傳送加密信息,此時傳送的是用證書加密後的隨機值,目的就是讓服務器獲得這個隨機值,之後客戶端和服務器端的通訊就能夠經過這個隨機值來進行加密解密了。
服務器端解密信息,服務器端用私鑰解密後,獲得客戶端傳過來的隨機值(私鑰),而後把內容經過該值進行對稱加密,所謂對稱加密就是,將信息和私鑰經過某種算法混合在一塊兒,這要除非知道私鑰,否則沒法獲取內容,而客戶端和服務器端都知道這個私鑰,因此只要加密算法夠彪悍,私鑰夠複雜,數據就足夠安全。
傳輸加密後的信息,這部分信息是服務器端用私鑰加密後的信息,能夠在客戶端還原。
客戶端解密信息,客戶端用以前生成的私鑰解密服務端傳過來的信息,因而獲取瞭解密後的內容,整個過程第三方即便監聽到了數據,也一籌莫展。
加密分爲:對稱加密和非對稱加密
流程:客戶端和服務器端進行一次私密對話:
1.每次對話時,服務器端都要給客戶端一個祕鑰
2.客戶端把數據加密之後,發送給服務器端
3.服務器端使用祕鑰解密接收到的數據
優勢:效率高
缺點:不夠安全,萬一黑客把祕鑰和密文截取了,他就能夠解密這段數據了
流程:客戶端和服務器端進行一次私密對話:
1.服務器端要給客戶端一個公鑰(全世界都知道),服務器端保留這個服務器對應的的私鑰
2.客戶端用公鑰把數據加密之後,發送給服務器端
3.服務器端使用對應的的私鑰解密接收到的數據
優勢:效率低
缺點:不夠安全,萬一黑客把密文截取了(公鑰早就知道了),他就能夠解密這段數據了
另外一種解釋(一人一種理解 -.-'):
HTTPS在傳輸數據以前須要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程當中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不只僅是一套加密傳輸的協議,更是一件通過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述以下:
1.瀏覽器將本身支持的一套加密規則發送給網站。
2.網站從中選出一組加密算法與HASH算法,並將本身的身份信息以證書的形式發回給瀏覽器。證書裏面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。
3.得到網站證書以後瀏覽器要作如下工做:
a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),若是證書受信任,則瀏覽器欄裏面會顯示一個小鎖頭,不然會給出證書不受信的提示。
b) 若是證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。
c) 使用約定好的HASH計算握手消息,並使用生成的隨機數對消息進行加密,最後將以前生成的全部信息發送給網站。
4.網站接收瀏覽器發來的數據以後要作如下的操做:
a) 使用本身的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手消息,發送給瀏覽器。
5.瀏覽器解密並計算握手消息的HASH,若是與服務端發來的HASH一致,此時握手過程結束,以後全部的通訊數據將由以前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。
這裏瀏覽器與網站互相發送加密的握手消息並驗證,目的是爲了保證雙方都得到了一致的密碼,而且能夠正常的加密解密數據,爲後續真正數據的傳輸作一次測試。另外,HTTPS通常使用的加密與HASH算法以下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非對稱加密算法用於在握手過程當中加密生成的密碼,對稱加密算法用於對真正傳輸的數據進行加密,而HASH算法用於驗證數據的完整性。因爲瀏覽器生成的密碼是整個數據加密的關鍵,所以在傳輸的時候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰只能用於加密數據,所以能夠隨意傳輸,而網站的私鑰用於對數據進行解密,因此網站都會很是當心的保管本身的私鑰,防止泄漏。
在以上流程中, 應用層發送數據時會附加一種叫作 MAC
( Message Authentication Code) 的報文摘要。 MAC 可以查知報文是否遭到篡改, 從而保護報文的完整性。