23 HTTPS是什麼?SSL/TLS又是什麼?

爲什麼要有 HTTPS?

由於 HTTP 天生“明文”的特點,整個傳輸過程完全透明,任何人都能夠在鏈路中截獲、修改或者僞造請求 / 響應報文,數據不具有可信性。

什麼是安全?

通常認爲,如果通信過程具備了四個特性,就可以認爲是“安全”的,這四個特性是:機密性、完整性,身份認證和不可否認。

  • 機密性(Secrecy/Confidentiality)是指對數據的“保密”,只能由可信的人訪問,對其他人是不可見的“祕密”,簡單來說就是不能讓不相關的人看到不該看的東西。
  • 完整性(Integrity,也叫一致性)是指數據在傳輸過程中沒有被竄改,不多也不少,“完完整整”地保持着原狀。機密性雖然可以讓數據成爲“祕密”,但不能防止黑客對數據的修改,黑客可以替換數據,調整數據的順序,或者增加、刪除部分數據,破壞通信過程。
  • 身份認證(Authentication)是指確認對方的真實身份,也就是“證明你真的是你”,保證消息只能發送給可信的人。
  • 不可否認(Non-repudiation/Undeniable),也叫不可抵賴,意思是不能否認已經發生過的行爲,不能“說話不算數”“耍賴皮”。

什麼是 HTTPS?

HTTPS 其實是一個“非常簡單”的協議,RFC 文檔很小,只有短短的 7 頁,裏面規定了新的協議名“https”,默認端口號 443,至於其他的什麼請求 - 應答模式、報文結構、請求方法、URI、頭字段、連接管理等等都完全沿用 HTTP,沒有任何新的東西。

你可能要問了,既然沒有新東西,HTTPS 憑什麼就能做到機密性、完整性這些安全特性呢?

祕密就在於 HTTPS 名字裏的“S”,它把 HTTP 下層的傳輸協議由 TCP/IP 換成了SSL/TLS,由“HTTP over TCP/IP”變成了“HTTP over SSL/TLS”,讓 HTTP 運行在了安全的 SSL/TLS 協議上(可參考第 4 講和第 5 講),收發報文不再使用 Socket API,而是調用專門的安全接口。

image

所以說,HTTPS 本身並沒有什麼“驚世駭俗”的本事,全是靠着後面的 SSL/TLS“撐腰”。只要學會了 SSL/TLS,HTTPS 自然就“手到擒來”。

SSL/TLS

SSL 即安全套接層(Secure Sockets Layer),在 OSI 模型中處於第 5 層(會話層),由網景公司於 1994 年發明,有 v2 和 v3 兩個版本,而 v1 因爲有嚴重的缺陷從未公開過。

SSL 發展到 v3 時已經證明了它自身是一個非常好的安全通信協議,於是互聯網工程組 IETF在 1999 年把它改名爲 TLS(傳輸層安全,Transport Layer Security),正式標準化,版本號從 1.0 重新算起,所以 TLS1.0 實際上就是 SSLv3.1。

到今天 TLS 已經發展出了三個版本,分別是 2006 年的 1.1、2008 年的 1.2 和去年(2018)的 1.3,每個新版本都緊跟密碼學的發展和互聯網的現狀,持續強化安全和性能,已經成爲了信息安全領域中的權威標準。

目前應用的最廣泛的 TLS 是 1.2,而之前的協議(TLS1.1/1.0、SSLv3/v2)都已經被認爲是不安全的,各大瀏覽器即將在 2020 年左右停止支持,所以接下來的講解都針對的是TLS1.2。

TLS 由記錄協議、握手協議、警告協議、變更密碼規範協議、擴展協議等幾個子協議組成,綜合使用了對稱加密、非對稱加密、身份認證等許多密碼學前沿技術。

瀏覽器和服務器在使用 TLS 建立連接時需要選擇一組恰當的加密算法來實現安全通信,這些算法的組合被稱爲“密碼套件”(cipher suite,也叫加密套件)。

ECDHE-RSA-AES256-GCM-SHA384

這麼長的名字看着有點暈吧,不用怕,其實 TLS 的密碼套件命名非常規範,格式很固定。基本的形式是“密鑰交換算法 + 簽名算法 + 對稱加密算法 + 摘要算法”,比如剛纔的密碼套件的意思就是:

“握手時使用 ECDHE 算法進行密鑰交換,用 RSA 簽名和身份認證,握手後的通信使用AES 對稱算法,密鑰長度 256 位,分組模式是 GCM,摘要算法 SHA384 用於消息認證和產生隨機數。”

OpenSSL

說到 TLS,就不能不談到 OpenSSL,它是一個著名的開源密碼學程序庫和工具包,幾乎支持所有公開的加密算法和協議,已經成爲了事實上的標準,許多應用軟件都會使用它作爲底層庫來實現 TLS 功能,包括常用的 Web 服務器 Apache、Nginx 等。

OpenSSL 是從另一個開源庫 SSLeay 發展出來的,曾經考慮命名爲“OpenTLS”,但當時(1998 年)TLS 還未正式確立,而 SSL 早已廣爲人知,所以最終使用了“OpenSSL”的名字。

OpenSSL 目前有三個主要的分支,1.0.2 和 1.1.0 都將在今年(2019)年底不再維護,最新的長期支持版本是 1.1.1,我們的實驗環境使用的 OpenSSL 是“1.1.0j”。

由於 OpenSSL 是開源的,所以它還有一些代碼分支,比如 Google 的 BoringSSL、OpenBSD 的 LibreSSL,這些分支在 OpenSSL 的基礎上刪除了一些老舊代碼,也增加了一些新特性,雖然背後有“大金主”,但離取代 OpenSSL 還差得很遠。

小結

  1. 因爲 HTTP 是明文傳輸,所以不安全,容易被黑客竊聽或竄改;
  2. 通信安全必須同時具備機密性、完整性,身份認證和不可否認這四個特性;
  3. HTTPS 的語法、語義仍然是 HTTP,但把下層的協議由 TCP/IP 換成了 SSL/TLS;
  4. SSL/TLS 是信息安全領域中的權威標準,採用多種先進的加密技術保證通信安全;
  5. OpenSSL 是著名的開源密碼學工具包,是 SSL/TLS 的具體實現。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章