1. 程式人生 > >Http和Https的區別/握手協議/單雙認證

Http和Https的區別/握手協議/單雙認證

HTTP與HTTPS有什麼區別?

HTTP協議傳輸的資料都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全,為了保證這些隱私資料能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的資料進行加密,從而就誕生了HTTPS。

簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。

HTTPS和HTTP的區別主要如下:

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

HTTPS的優點

正是由於HTTPS非常的安全,攻擊者無法從中找到下手的地方,從站長的角度來說,HTTPS的優點有以下2點:

1、SEO方面

谷歌曾在2014年8月份調整搜尋引擎演算法,並稱“比起同等HTTP網站,採用HTTPS加密的網站在搜尋結果中的排名將會更高”。

2、安全性

儘管HTTPS並非絕對安全,掌握根證書的機構、掌握加密演算法的組織同樣可以進行中間人形式的攻擊,但HTTPS仍是現行架構下最安全的解決方案,主要有以下幾個好處:

(1)、使用HTTPS協議可認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;

(2)、HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全,可防止資料在傳輸過程中不被竊取、改變,確保資料的完整性。

(3)、HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。

HTTPS的缺點

雖然說HTTPS有很大的優勢,但其相對來說,還是有些不足之處的,具體來說,有以下2點:

1、SEO方面

據ACM CoNEXT資料顯示,使用HTTPS協議會使頁面的載入時間延長近50%,增加10%到20%的耗電,此外,HTTPS協議還會影響快取,增加資料開銷和功耗,甚至已有安全措施也會受到影響也會因此而受到影響。

而且HTTPS協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、伺服器劫持等方面幾乎起不到什麼作用。

最關鍵的,SSL證書的信用鏈體系並不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。

2、經濟方面

(1)、SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用。

(2)、SSL證書通常需要繫結IP,不能在同一IP上繫結多個域名,IPv4資源不可能支撐這個消耗(SSL有擴充套件可以部分解決這個問題,但是比較麻煩,而且要求瀏覽器、作業系統支援,Windows XP就不支援這個擴充套件,考慮到XP的裝機量,這個特性幾乎沒用)。

(3)、HTTPS連線快取不如HTTP高效,大流量網站如非必要也不會採用,流量成本太高。

(4)、HTTPS連線伺服器端資源佔用高很多,支援訪客稍多的網站需要投入更大的成本,如果全部採用HTTPS,基於大部分計算資源閒置的假設的VPS的平均成本會上去。

(5)、HTTPS協議握手階段比較費時,對網站的相應速度有負面影響,如非必要,沒有理由犧牲使用者體驗。


https大致過程

  1. 建立伺服器443埠連線
  2. SSL握手:隨機數,證書,金鑰,加密演算法
  3. 傳送加密請求
  4. 傳送加密響應
  5. 關閉SSL
  6. 關閉TCP

SSL握手大致過程:

  1. 客戶端傳送隨機數1,支援的加密方法(如RSA公鑰加密)
  2. 服務端傳送隨機數2,和伺服器公鑰,並確認加密方法
  3. 客戶端傳送用伺服器公鑰加密的隨機數3
  4. 伺服器用私鑰解密這個隨機數3,用加密方法計算生成對稱加密的金鑰給客戶端,
  5. 接下來的報文都用雙方協定好的加密方法和金鑰,進行加密

SSL握手詳細過程:

一、客戶端發出加密通訊請求ClientHello

提供: 
1,協議版本(如TSL1.0) 
2,隨機數1(用於生成對話金鑰) 
3,支援的加密方法(如RSA公鑰加密) 
4,支援的壓縮方法

二、伺服器迴應SeverHello

迴應內容: 
1,確認使用的加密通訊協議版本(TSL1.0) 
2,隨機數2(用於生成對話金鑰) 
3,確認加密方法(RSA) 
4,伺服器證書(包含非對稱加密的公鑰) 
5,(可選)要求客戶端提供證書的請求

三、客戶端驗證證書

如果證書不是可信機構頒佈,或證書域名與實際域名不符,或者證書已經過期,就會向訪問者顯示一個警告,是否繼續通訊

四、客戶端迴應

證書沒有問題,就會取出證書中的伺服器公鑰 
然後傳送: 
1,隨機數3(pre-master key,此隨機數用伺服器公鑰加密,防止被竊聽) 
2,編碼改變通知(表示隨後的資訊都將用雙方商定的方法和金鑰傳送) 
3,客戶端握手結束通知

五、雙方生成會話金鑰

雙方同時有了三個隨機數,接著就用事先商定的加密方法,各自生成同一把“會話金鑰” 
伺服器端用自己的私鑰(非對稱加密的)獲取第三個隨機數,會計算生成本次所用的會話金鑰(對稱加密的金鑰),如果前一步要求客戶端證書,會在這一步驗證

六、伺服器最後響應

伺服器生成會話金鑰後,向客戶端傳送: 
1,編碼改變通知(後面的資訊都用雙方的加密方法和金鑰來發送) 
2,伺服器握手結束通知

至此,握手階段全部結束,接下來客戶端與伺服器進入加密通訊,用會話金鑰加密內容

關於單雙認證

一般來說,我們正常訪問的都是https都是單向認證,也就是說,客戶端會對伺服器的

證書進行校驗,並且給客戶端傳送公鑰。來回互動的資料都是密文傳輸的。

在部分情況下,比如企業內部訪問考慮使用雙向認證,雙向認證比單項認證多了一環,也就是伺服器也會對客戶端的證書進行校驗,並且需要客戶端像伺服器端也提供公鑰。

總結下就是,

單項認證,只用客戶確定客戶訪問的網站是對的不是假的,且資料加密互動服務端和的客戶端資料。

雙向認證,是客戶確定訪問的網站是不是對的,證書安全不安全的之後,服務端也要確定客戶是不是我認證的,允許訪問的客戶。雙方都確定後身份正確後,在把資料加密傳送

關於單項認證和雙向認證的有關可以看看這篇博文:

http://blog.csdn.net/duanbokan/article/details/50847612

關於雙向的https程式碼層可以看看這個:

http://blog.csdn.net/dtlscsl/article/details/50118225

https://www.cnblogs.com/dreamingodd/p/7491098.html

測試一下單雙認證的程式碼:

http://blog.csdn.net/zbuger/article/details/51695582