昨天寫了一篇用戶密碼存儲的安全性后,有讀者留言詢問關于如何保障客戶端和服務端數(shù)據(jù)傳輸?shù)陌踩员苣@個話題在過去幾年正好是我特別關注的一個點航唆,所以我今天試著用我的經(jīng)驗來解答這個問題。
和密碼存儲一樣蹂析,如果客戶端的發(fā)出來Request通過明文傳輸是相當危險的,數(shù)據(jù)包一旦被中途截取到碟婆,通過常用的抓包軟件电抚,Charles或者Fiddler都能直接解析拿到客戶端的請求數(shù)據(jù),例如用戶名密碼之類竖共。所以我們需要數(shù)據(jù)加密蝙叛,包括走HTTPS協(xié)議。
數(shù)據(jù)加密的方式
對于數(shù)據(jù)傳輸加密公给,簡單來看分為兩類(實際上還有一類叫做單向加密借帘,這里不展開):對稱加密方式和非對稱加密方式蜘渣。
顧名思義,對于對稱加密方式肺然,發(fā)送方和接收方都使用同一個密鑰對信息進行加密蔫缸、解密。所以對稱加密的優(yōu)點和不足都是很明顯的: 優(yōu)點是對稱加密方式速度很快际起,缺點是不同類型的通信端需要維護不同的密鑰拾碌,同時由于客戶端和服務端都需要保存密鑰,所以密鑰泄密的潛在可能性也更大街望。
非對稱方式規(guī)定了密鑰需要有一對兒一個公鑰(Public Key)和一個私鑰(Private Key/Security Key),如果用公鑰加密信息校翔,就需要用相同配對的私鑰才能解密,反之亦然灾前。非對稱方式的特點是數(shù)據(jù)可靠性相當強防症,很大程度上保證了身份認證。
數(shù)字證書的作用
不過無論是對稱或者非對稱方式豫柬,都不具備防御中間人攻擊的能力告希。當主機A和主機B通信時,即便他們中間插入了一個"轉發(fā)"主機C, ?A烧给、B都不會意識到燕偶,而繼續(xù)以為它們之間是在直接通信。C可以不僅竊聽A础嫡、B的通信還可以對信息進行篡改再傳給對方指么,C便可以將惡意信息傳遞給A、B以達到自己的目的榴鼎。
防止中間人攻擊的方法實際上就是身份證認證方式伯诬,目前主流方式就是數(shù)字簽名的方式,但是也是存在利用不對稱信息巫财、時間戳盗似、生物信息、物理信息等其它成熟或者是不成熟平项,公開或不公開的解決方式赫舒。
數(shù)字證書是經(jīng)過權威機構(CA)認證的公鑰,通過查看數(shù)字證書闽瓢,可以知道該證書是由那家權威機構簽發(fā)的接癌,證書使用人的信息,使用人的公鑰扣讼。它有以下特點:
1缺猛、由專門的機構簽發(fā)的數(shù)字證書才安全有效。
2、簽發(fā)數(shù)字證書是收費的荔燎。
3耻姥、不會被冒充,安全可信有咨。
4咏闪、數(shù)字證書有使用期限,過了使用期限摔吏,證書變?yōu)椴豢捎谩A也可以在試用期內纵装,對證書進行作廢操作征讲。
因此,在實際中數(shù)字證書+ RSA加密的辦法來保障數(shù)據(jù)傳輸?shù)陌踩浴?/p>
API訪問改走HTTPS
上面提到的數(shù)字證書在現(xiàn)實中實施的實例就是HTTPS協(xié)議橡娄,所以除了代碼層面上通過RSA加密诗箍,我們還會將API訪問統(tǒng)一改走HTTPS協(xié)議,可以從根本上解決數(shù)據(jù)被篡改的可能性:
1. 避免運營商強插廣告挽唉,甚至在正常結果前面插一條廣告(天朝特色)
2. 手機客戶端上被瀏覽器或者惡意軟件篡改或者劫持
3. 阻止用戶數(shù)據(jù)泄露
考慮到之前OpenSSL的滴血漏洞滤祖,數(shù)據(jù)傳輸?shù)陌踩越^不是一勞永逸的,需要時刻保持警惕瓶籽。
掃描二維碼或手動搜索微信公眾號【架構椊惩】: ForestNotes