更新
1.那麼,伺服器如何識别用戶端的身份?我們如何保證資料傳輸過程中的安全性?要靠兩個東西:使用AppKey做身份識别,使用AppSecret校驗資料,最簡單有效的辦法還是打到.so庫中。
2.a和b生成兩對公私鑰 https://s4.51cto.com/wyfs02/M02/9A/70/wKiom1lV2tOgjaUbAAfY9aWxmNw467.jpg
4.中間人攻擊
https://ifunbox.top/wp-content/uploads/2017/08/8f8f6a3ae7dc26a66a0d744301fc0e16.png
微信開發
<code>app appkey和appsecret</code>
<code>oauth2.0,在擁有appkey和appsecret</code>
<code>去讀oauth2 的協定文檔,讀實作源碼,自己實作服務端和用戶端,折騰一遍就懂了</code>
<code>kubernetes API Server 權限管理實踐</code>
<code>證書驗證,一對rsa,然後伺服器上方</code>
<a href="http://blog.csdn.net/sambillyr/article/details/48489745" target="_blank">用戶端與伺服器通信中的安全使者——AppSecret</a>
<a href="http://blog.csdn.net/woddle/article/details/71175140" target="_blank">http://blog.csdn.net/woddle/article/details/71175140</a>
http://www.cnblogs.com/alisecurity/p/5939336.html
<code>如何加強證書校驗</code>
<code> </code><code>通過上文第一和第二部分的說明,相信大家已經對https有個大概的了解了,那麼問題來了,怎樣才能防止這些“中間人攻擊”呢?</code>
<code> </code><code>app證書校驗已經是一個老生常談的問題了,但是市場上還是有很多的app未做好證書校驗,有些隻做了部分校驗,例如檢查證書域名是否比對證書是否過期,更多數的是根本就不做校驗,于是就造成了中間人攻擊。做證書校驗需要做完全,隻做一部分都會導緻中間人攻擊,對于安全要求并不是特别高的app可使用如下校驗方式:</code>
<code>檢視證書是否過期</code>
<code>伺服器證書上的域名是否和伺服器的實際域名相比對</code>
<code>校驗證書鍊</code>
<code> </code><code>可參考http:</code><code>/</code><code>/</code><code>drops.wooyun.org</code><code>/</code><code>tips</code><code>/</code><code>3296</code><code>,此類校驗方式雖然在導入CA公鑰證書到用戶端之後會造成中間人攻擊,但是攻擊門檻已相對較高,是以對于安全要求不是特别高的app可采用此方法進行防禦。對于安全有較高要求一些app(例如金融)上述方法或許還未達到要求,那麼此時可以使用如下更安全的校驗方式,将服務端證書打包放到app裡,再建立https連結時使用本地證書和網絡下發證書進行一緻性校驗。</code>
<code> </code><code>此類校驗即便導入CA公鑰證書也無法進行中間人攻擊,但是相應的維護成本會相對升高,例如伺服器證書過期,證書更換時如果app不更新就無法使用,那麼可以改一下,生成一對RSA的公私鑰,公鑰可寫死在app,私鑰放伺服器。 https握手前可通過伺服器下發證書資訊,例如公鑰、辦法機構、簽名等,該下發的資訊使用伺服器裡的私鑰進行簽名; 通過app裡預置的公鑰驗簽得到證書資訊并存在内容中供後續使用; 發起https連接配接擷取伺服器的證書,通過對比兩個證書資訊是否一緻進行證書校驗。</code>
<code> </code><code>這樣即可避免強升的問題,但是問題又來了,這樣效率是不是低太多了?答案是肯定的,是以對于安全要求一般的應用使用第一種方法即可,對于一些安全要求較高的例如金融企業可選擇第二種方法。</code>
<code> </code><code>說了挺多,但是該來的問題還是會來啊!現在的app一般采用混合開發,會使用很多webveiw直接加載html5頁面,上面的方法隻解決了java層證書校驗的問題,并沒有涉及到webview裡面的證書校驗,對于這種情況怎麼辦呢?既然問題來了那麼就一起說說解決方案,對于webview加載html5進行證書校驗的方法如下:</code>
<code> </code><code>webview建立執行個體加載網頁時通過onPageStart方法傳回url位址; 将傳回的位址轉發到java層使用上述的證書校驗代碼進行進行校驗; 如果證書校驗出錯則使用stoploading()方法停止網頁加載,證書校驗通過則正常加載。</code>
2種方法
1.将服務端證書打包放到app裡,再建立https連結時使用本地證書和網絡下發證書進行一緻性校驗。
或者
2.生成一對RSA的公私鑰,公鑰可寫死在app,私鑰放伺服器
3.對于webview加載html5進行證書校驗的方法如下:
webview建立執行個體加載網頁時通過onPageStart方法傳回url位址; 将傳回的位址轉發到java層使用上述的證書校驗代碼進行進行校驗; 如果證書校驗出錯則使用stoploading()方法停止網頁加載,證書校驗通過則正常加載
完整參考
<a href="http://wzlinux.blog.51cto.com/8021085/1908858" target="_blank">http://wzlinux.blog.51cto.com/8021085/1908858</a>
1.證書未校驗
2.部分校驗
3.證書鍊校驗
4.手機用戶端Https資料包抓取
5.中間人攻擊原理
通過讀Mitmproxy的源碼發現mitmproxy生成僞造證書的函數如下:
<b>本文轉自 liqius 51CTO部落格,原文連結:</b><b>http://blog.51cto.com/szgb17/1947065</b><b>,如需轉載請自行聯系原作者</b>