HTTPS介紹及加密的過程

http協議可能存在信息竊聽或身份僞造等安全問題,使用https通信機制可以有效的防止這些問題。

1、HTTP的缺點

凡事皆有兩面性,http作爲應用廣泛的通信協議,自然是十分優秀的,但其也存在不足之處:

(1)通信使用明文,可能會被竊聽。

爲了保證http傳輸的高效性,http本身不具備加密功能,所以無法對通信整體進行加密。爲了解決這個問題,可以對通信或者內容進行加密。

通信加密:可以通過SSL(Secure Socket Layer,安全套接層)或TLS(Transport Layer Security,安全層傳輸協議)的組合使用,加密HTTP的通信內容。

用SSL建立安全通信線路之後,就可以在這條線路上進行HTTP通信了。與SSL組合使用的HTTP就是HTTPS(HTTP Secure,超文本傳輸安全協議)

內容加密:由於 HTTP 協議中沒有加密機制,那麼就對 HTTP 協議傳輸的內容本身加密。即把HTTP 報文裏所含的內容進行加密處理。 在這種情況下,客戶端需要對 HTTP 報文進行加密處理後再發送請求。

爲了做到有效的內容加密,前提是要求客戶端和服務器同時具備加密和解密機制。主要應用在 Web 服務中。有一點必須引起注意,由於該方式不同於 SSL或 TLS 將整個通信線路加密處理,所以內容仍有被篡改的風險。

(2)通信時不會驗證雙方的身份,可能遭遇僞裝。

在這種情況下, 任何客戶端都可以發送請求,而服務器只要接收到請求,不管對方是誰都會返回一個響應。在這種機制下就可能存在很多問題。

爲了解決這一問題,也可以使用SSL協議。SSL協議不僅能進行加密處理,而且還使用了證書可以用於確定對方的身份。證書由值得信任的第三方機構頒發,用以證明服務器和客戶端是實際存在的。另外,僞造證書從技術角度來說是異常困難的一件事。所以只要能夠確認通信方(服務器或客戶端)持有的證書,即可判斷通信方的真實意圖。

(3)無法證明報文的完整性,可能遭遇篡改。

所謂完整性是指信息的準確度。若無法證明其完整性,通常也就意味着無法判斷信息是否準確。

由於HTTP無法驗證報文的準確性,因此在請求或者響應時發送的報文數據,在接收到之前有可能會被篡改,但HTTP無法知悉。

比如,從某個 Web 網站上下載內容,是無法確定客戶端下載的文件和服務器上存放的文件是否前後一致的。文件內容在傳輸途中可能已經被篡改爲其他的內容。即使內容真的已改變,作爲接收方的客戶端也是覺察不到的。

像這樣,請求或響應在傳輸途中,遭攻擊者攔截並篡改內容的攻擊稱爲中間人攻擊(Man-in-the-Middle attack,MITM)。

雖然有HTTP協議確定報文完整性的方法,但事實上並不便捷可靠。其中常用的是MD5和SHA-1等散列值校驗方法,以此用來確認文件的數字簽名方法。

爲了有效防止這些弊端,有必要使用 HTTPS。SSL提供認證和加密處理及摘要功能。僅靠 HTTP 確保完整性是非常困難的,因此通過和其他協議組合使用來實現這個目標。

2、HTTPS

2.1 HTTPS是什麼

HTTPS = HTTP + 加密 + 認證 + 完整性保護。HTTP加上加密處理和認證以及完整性保護後即是HTTPS。

如果在HTTP協議通信過程中使用了未經加密的明文,比如在web頁面中輸入信用卡號,如果這條通信線路遭到竊聽,那麼信用卡號就暴露了。

另外對於HTTP來說,不管是客戶端還是服務端,都沒有辦法確認通信雙方。因爲很有可能並不是和原本預想的通信方在實際通信。並且還需要考慮到接收到的報文在通信途中已經遭到篡改這一可能性。

爲了統一解決上述這些問題,需要在 HTTP 上再加入加密處理和認證等機制。我們把添加了加密及認證機制的 HTTP 稱爲 HTTPS(HTTP Secure)。

HTTPS並非是應用層的新協議,只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)協議代替。

通常,HTTP直接和TCP通信。當使用SSL時,則演變成先和SSL通信,再由SSL和TCP通信。簡而言之,HTTPS就是身披SSL協議的HTTP。

採用SSL後,HTTP就擁有了HTTPS的加密、證書和完整性保護的功能。

SSL是獨立於 HTTP 的協議,所以不光是 HTTP 協議,其他運行在應用層的 SMTP 和 Telnet 等協議均可配合 SSL協議使用。可以說 SSL是當今世界上應用最爲廣泛的網絡安全技術。

2.2 加密技術

加密技術可以分爲兩類:對稱加密和非對稱加密。

(1)對稱加密:密鑰只有一個,加密解密爲同⼀個密碼,且加解密速度快,典型的對稱加密算法有DES、AES等;

利用這種加密方式加密時必須要把密鑰也發送給對方,密鑰在傳輸過程中如果被截獲,那麼也就失去了加密的意義。

(2)非對稱加密::密鑰成對出現(且根據公鑰⽆法推知私鑰,根據私鑰也⽆法推知公鑰),加密解密使⽤不同密鑰(公鑰加密需要私鑰解密,私鑰加密需要公鑰解密),相對對稱加密速度慢,典型的⾮對稱加密算法有RSA、DSA等。

非對稱加密很好的解決了對稱加密的不足之處。非對稱加密使用一對非對稱的密鑰。一把叫做私有密鑰(private key),另一把叫做公開密鑰(public key)。顧名思義,私有密鑰不能讓其他任何人知道,而公開密鑰則可以隨意發佈,任何人都可以獲得。

使用非對稱加密方式,發送密文的一方使用對方的公開密鑰進行加密處理,對方收到被加密的信息後,再使用自己的私有密鑰進行解密。利用這種方式,不需要發送用來解密的私有密鑰,也不必擔心密鑰被攻擊者竊聽而盜走。

另外,要想根據密文和公開密鑰,恢復到信息原文是異常困難的,因爲解密過程就是在對離散對數進行求值,這並非輕而易舉就能辦到。退一步講,如果能對一個非常大的整數做到快速地因式分解,那麼密碼破解還是存在希望的。但就目前的技術來看是不太現實的。

2.3 HTTPS的加密方式

HTTPS採用混合加密的方式,即同時採用了對稱加密和非對稱加密。

非對稱加密雖然比對稱加密更安全,但其不足之處就是加解密需要耗費更長的時間。所以HTTPS綜合了兩者的優勢,在交換密鑰環節使用了非對稱加密方式,之後建立通信交換報文階段則使用了對稱加密方式

在上述過程,客戶端和服務器先使用非對稱加密,服務器將公鑰返回給客戶端,客戶端在拿到服務端的公鑰後,通過公鑰對key進行加密後發送給服務器,服務器再使用它的私鑰進行解密後得到key。這個key只有服務器才能拿到。隨後客戶端和服務端建立連接進行通信,爲了提高通信效率,使用對稱加密進行,密鑰就是之前拿到的key。

HTTPS 正好綜合了這兩種加密算法的優點,不僅保證了通信安全,還保證了數據傳輸效率。

2.4 CA證書

遺憾的是,非對稱加密方式還是存在一些問題的。那就是無法證明公開密鑰本身就是貨真價實的公開密鑰。比如,正準備和某臺服務器建立非對稱加密方式下的通信時,如何證明收到的公開密鑰就是原本預想的那臺服務器發行的公開密鑰。或許在公開密鑰傳輸途中,真正的公開密鑰已經被攻擊者替換掉了。

爲了解決上述問題,可以使用由數字證書認證機構(CA,Certificate Authority)和其相關機關頒發的公開密鑰證書。

首先,服務器的運營人員向數字證書認證機構提出公開密鑰的申請。數字證書認證機構在判明提出申請者的身份之後,會對已申請的公開密鑰做數字簽名,然後分配這個已簽名的公開密鑰,並將該公開密鑰放入公鑰證書後綁定在一起。

服務器會將這份由數字證書認證機構頒發的公鑰證書發送給客戶端,以進行公開密鑰加密方式通信。公鑰證書也可叫做數字證書或直接稱爲證書。 接到證書的客戶端可使用數字證書認證機構的公開密鑰,對那張證書上的數字簽名進行驗證,一旦驗證通過,客戶端便可明確兩件事: 一,認證服務器的公開密鑰的是真實有效的數字證書認證機構。二,服務器的公開密鑰是值得信賴的。

此處認證機關的公開密鑰必須安全地轉交給客戶端。使用通信方式時,如何安全轉交是一件很困難的事,因此,多數瀏覽器開發商發佈版本時,會事先在內部植入常用認證機關的公開密鑰。

2.5 HTTPS的通信過程

大致分爲三個過程:證書驗證、建立連接、數據傳輸

(1)客戶端發送請求給服務器。

(2)服務器保存有CA證書,該證書中包含有非對稱加密的公鑰以及其他公司信息等。

(3)服務器響應請求,並且攜帶數字證書發送給客戶端

(4)客戶端接收到數字證書後,會進行解析,如果證書不是可信機構頒佈,或者證書中的域名與實際域名不一致,或者證書已經過期,就會向訪問者顯示一個警告,由其選擇是否還要繼續通信。

如果證書沒有問題,客戶端就會從服務器證書中取出服務器的公鑰A。然後客戶端還會生成一個隨機碼 KEY,並使用公鑰A將其加密。

(5)客戶端把加密後的key發送給服務器。

(6)服務器會使用它獨有的私鑰B對加密後的key進行解密得到key。此時客戶端和服務器建立連接,保證了key只有雙方纔知道,爲後面通信時數據傳輸做準備。

(7)服務器使用密鑰 (隨機碼 KEY)對數據進行對稱加密併發送給客戶端,客戶端使用相同的密鑰 (隨機碼 KEY)解密數據。

(8)雙方使用對稱加密愉快地傳輸所有數據。

3、總結

HTTP和HTTPS的區別

  • 最重要的區別就是安全性,HTTP 明文傳輸,不對數據進行加密安全性較差。HTTPS (HTTP + SSL / TLS)的數據傳輸過程是加密的,安全性較好。
  • 使用 HTTPS 協議需要申請 CA 證書,一般免費證書較少,因而需要一定費用。證書頒發機構如:Symantec、Comodo、DigiCert 和 GlobalSign 等。
  • HTTP 頁面響應速度比 HTTPS 快,這個很好理解,由於加了一層安全層,建立連接的過程更復雜,也要交換更多的數據,難免影響速度。
  • 由於 HTTPS 是建構在 SSL / TLS 之上的 HTTP 協議,所以,要比 HTTP 更耗費服務器資源。
  • HTTPS 和 HTTP 使用的是完全不同的連接方式,用的端口也不一樣,前者是 443,後者是 80。

HTTPS 缺點

  • 在相同網絡環境中,HTTPS 相比 HTTP 無論是響應時間還是耗電量都有大幅度上升。
  • HTTPS 的安全是有範圍的,在黑客攻擊、服務器劫持等情況下幾乎起不到作用。
  • 在現有的證書機制下,中間人攻擊依然有可能發生。
  • HTTPS 需要更多的服務器資源,也會導致成本的升高。

參考:
(1)書籍《圖解HTTP》
(2)https://segmentfault.com/a/1190000021494676

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章