也來聊聊 HTTPS

2022-01-31 10:01:31 字數 2389 閱讀 4735

前言:網上聊 https 的文章已經數都數不過來了吧,厚著臉皮,整理下讀書筆記,結合平常專案的實踐,也來聊聊 https。

眾所周知,http 協議具有無連線、不可靠、盡最大努力的特點,這也為 htpp 協議帶來資訊竊聽或身份偽裝等安全問題。主要體現在幾個方面:

那要如何做到防止竊聽保護資訊呢?最為普及的就是加密技術。

ssl 協議最初是由瀏覽器開發商網景通訊公司率先倡導的,開發過 ssl3.0 之前的版本。ietf 以 ssl3.0 為基準,後又制定了 tls1.0、tls1.1 和 tls1.2。tsl 是以 ssl為原型開發的協議,有時會統一稱該協議為 ssl。當前主流的版本是 ssl3.0 和 tls1.0。

ssl 不僅提供加密處理,而且還使用了一種被稱為證書的手段,可用於確定通訊方。

https 具有加密、認證以及完整性保護的功能。

客戶端和服務端想要進行安全的通訊,首先想到的就是對通訊雙方的內容進行加密處理。客戶端利用「金鑰」加密內容,服務端利用「金鑰」解密內容,反之亦然。這種方式稱為對稱(共享金鑰)加密。

對稱加密客戶端和服務端的「金鑰」是一致的,因此,客戶端和服務端之間的「金鑰」傳輸不可避免,如果「金鑰」在傳輸途中被盜用,那麼加密處理就沒有意義了。

那麼如何保護「金鑰」的傳輸安全呢?實踐的思路是非對稱(公開金鑰)加密,服務端擁有 公鑰(public key)+ 私鑰(private key)的金鑰對,公鑰任何人都可以獲取,私鑰只儲存在服務端。以下是 ssl 建立安全通訊線路的過程。

服務端將公鑰傳輸給客戶端。

客戶端通過公鑰加密「金鑰」(客戶端生成)得到乙個加密串並傳輸給服務端。

服務端根據私鑰解密加密串得到「金鑰」。

雙方通過「金鑰」加密傳輸。

非對稱加密「金鑰」的方式很好的保障了「金鑰」的安全傳輸,因為即使傳輸過程中加密串被盜用了,由於盜用者沒有私鑰資訊,也無法得到加密串中的「金鑰」資訊。

https 採用對稱(共享金鑰)加密和非對稱(公開金鑰)加密兩者並用的混合加密機制。之所以要這麼複雜,是因為非對稱加密的處理速度相較於對稱加密要慢,因此,我們一般在交換「金鑰」環節使用非對稱加密,之後的建立通訊交換報文階段則使用對稱加密方式。

遺憾的是,非對稱加密傳輸「金鑰」的方式仍然有缺陷,那就是無法證明伺服器公鑰本身就是貨真價實的公鑰。比如,接收到某台伺服器的公鑰,如何證明公鑰就是原本預想的那台伺服器發行的公鑰呢?或許在公鑰傳輸途中,真正的公鑰已經被攻擊者替換掉了。

電腦科學領域的任何問題都可以通過增加乙個間接的中間層來解決。

這裡我們引入的中間層就是數字證書認證機構(ca,certificate authority),數字證書認證機構處於客戶端與伺服器雙方都可信賴的第三方機構的立場上,以下是數字證書認證機構的業務流程。

伺服器的運營人員向數字證書認證機構提出公開金鑰的申請。

數字證書認證機構在判明提出申請者的身份之後,會對已申請的公開金鑰做數字簽名,然後分配這個已簽名的公開金鑰,並將該公開金鑰放入公鑰證書。

伺服器將公鑰證書下發給客戶端。

客戶端使用公鑰證書的公開金鑰,對那張證書上的數字簽名進行驗證,一旦驗證通過,客戶端便可明確兩件事:一,認證伺服器的公開金鑰的是真實有效的數字證書認證機構頒發的。二,伺服器的公開金鑰是值得信賴的。

https 中還可以使用客戶端證書,以客戶端證書進行客戶端認證,證明伺服器正在通訊的對方始終是預料之內的客戶端,其作用跟伺服器證書如出一轍。

使用 openssl 這套開源程式,每個人都可以構建一套屬於自己的認證機構,從而自己給自己頒發伺服器證書,但該伺服器證書在網際網路上不可作為證書使用,因為個人並不是可信任的三方機構。

基於 ssl 進行 http 通訊時,應用層傳送資料會附加一種叫做 mac(message authentication code)的報文摘要,mac 能夠查知報文是否遭到篡改,從而保護報文的完整性。

cbc 模式(cipher block chaining)又名密碼分組鏈結模式。在此模式下,將前乙個明文塊加密處理後和下乙個明文塊做 xor 運算,使之重疊,然後再對運算結果做加密處理。 對第乙個明文塊做加密時,要麼使用前一段密文的最後一塊,要麼利用外部生成的初始向量(initial vector, iv)。

處理速度上,由於 https 還需要做伺服器、客戶端雙方加密及解密過程,因此會消耗 cpu 和記憶體等硬體資源。

通訊上,和單純 http 通訊相比,ssl 通訊會消耗部分網路資源。

綜上所述,相較於 http 通訊來說,https 通訊速度會變慢。針對速度變慢這一問題,並沒有根本性的解決方案,我們會使用 ssl 加速器這種(專用伺服器)硬體來改善該問題。 該硬體為 ss通訊專用硬體,相對軟體來講,能夠提高數倍 ssl 的計算速度。

我也來聊聊CoreData

屬性列表 物件序列化 sqlite資料庫 coredata 今天我們來重點說說coredata 方式 coredata是ios5之後才出現的乙個框架,它提供了物件 關係對映 orm 的功能,即 能夠將oc物件轉化成資料,儲存在sqlite資料庫檔案中,也能夠將儲存在資料庫中的資料還原成oc物件.在此...

我們來聊聊技術債務

技術債務 技術債務 是開發團隊在設計或架構選型時,從短期效應的角度選擇了乙個易於實現的方案。但從長遠來看,這種方案會帶來更消極的影響,亦即開發團隊所欠的債務。簡單的說就是為了快速地解決問題,而採取的不規範的方案。比如 開發工程師將某個判斷條件寫死 測試工程師未進行深入自動化測試 架構師運用了乙個即將...

來聊聊原始碼學習

現如今我們的開發工作並不會從零開始,往往會基於很多開源庫,就前端而言,構建工具我們會使用 webpack,mvvm 框架我們會使用 vue react 或者 angular,這些開源工具幫助我們大大提公升了生產效率。很多同學都嘗試學習過原始碼,目前業內也會有各種開源庫的原始碼解析文章,那麼今天我們也...