談談數據傳輸中的安全性

昨天寫了一篇用戶密碼存儲的安全性後,有讀者留言詢問關於如何保障客戶端和服務端數據傳輸的安全性,這個話題在過去幾年正好是我特別關注的一個點,因此我今天試着用個人經驗來解答這個問題。瀏覽器


和密碼存儲同樣,若是客戶端的發出來Request經過明文傳輸是至關危險的,數據包一旦被中途截取到,經過經常使用的抓包軟件,Charles或者Fiddler都能直接解析拿到客戶端的請求數據,例如用戶名密碼之類。因此咱們須要數據加密,包括走HTTPS協議。
安全


數據加密的方式微信


對於數據傳輸加密,簡單來看分爲兩類(實際上還有一類叫作單向加密,這裏不展開):對稱加密方式非對稱加密方式架構

顧名思義,對於對稱加密方式,發送方和接收方都使用同一個密鑰對信息進行加密、解密。因此對稱加密的優勢和不足都是很明顯的: 優勢是對稱加密方式速度很快,缺點是不一樣類型的通訊端須要維護不一樣的密鑰,同時因爲客戶端和服務端都須要保存密鑰,因此密鑰泄密的潛在可能性也更大。加密

非對稱方式規定了密鑰須要有一對兒一個公鑰(Public Key)和一個私鑰(Private Key/Security Key),若是用公鑰加密信息,就須要用相同配對的私鑰才能解密,反之亦然。非對稱方式的特色是數據可靠性至關強,很大程度上保證了身份認證。rest


數字證書的做用
cdn


不過不管是對稱或者非對稱方式,都不具有防護中間人攻擊的能力。當主機A和主機B通訊時,即使他們中間插入了一個"轉發"主機C, A、B都不會意識到,而繼續覺得它們之間是在直接通訊。C能夠不只竊聽A、B的通訊還能夠對信息進行篡改再傳給對方,C即可以將惡意信息傳遞給A、B以達到本身的目的。get

防止中間人攻擊的方法實際上就是身份證認證方式,目前主流方式就是數字簽名的方式,可是也是存在利用不對稱信息、時間戳、生物信息、物理信息等其它成熟或者是不成熟,公開或不公開的解決方式。it

數字證書是通過權威機構(CA)認證的公鑰,經過查看數字證書,能夠知道該證書是由那家權威機構簽發的,證書使用人的信息,使用人的公鑰。它有如下特色:io


一、由專門的機構簽發的數字證書才安全有效。

二、簽發數字證書是收費的。

三、不會被冒充,安全可信。

四、數字證書有使用期限,過了使用期限,證書變爲不可用。CA也能夠在試用期內,對證書進行做廢操做。

所以,在實際中數字證書+ RSA加密的辦法來保障數據傳輸的安全性。


API訪問改走HTTPS


上面提到的數字證書在現實中實施的實例就是HTTPS協議,因此除了代碼層面上經過RSA加密,咱們還會將API訪問統一改走HTTPS協議,能夠從根本上解決數據被篡改的可能性:


1. 避免運營商強插廣告,甚至在正常結果前面插一條廣告(天朝特點)
2. 手機客戶端上被瀏覽器或者惡意軟件篡改或者劫持
3. 阻止用戶數據泄露


考慮到以前OpenSSL的滴血漏洞,數據傳輸的安全性毫不是一勞永逸的,須要時刻保持警戒。

掃描二維碼或手動搜索微信公衆號【架構棧】: ForestNotes

歡迎轉載,帶上如下二維碼便可

相關文章
相關標籤/搜索