我們正在研究一種通過SSL通過REST API與後端通信的移動應用程序。移動設備對API調用執行證書驗證(使用移動框架中的標準庫)。 如果我們嘗試通過代理(如Charles)連接移動設備,我們會看到所有流量,但是它是加密的 - 正如預期的那樣。 但是,如果我啓用SSL代理,生成根證書並在設備上安裝該證書,我將通過查爾斯以明文形式查看所有數據 - 如預期的那樣。保護移動應用程序免遭中間人攻擊
問題是,如何防止這種情況? 當然,主要目標是僅當設備調用允許服務器使用該服務器的有效證書時才公開數據。
我們正在研究一種通過SSL通過REST API與後端通信的移動應用程序。移動設備對API調用執行證書驗證(使用移動框架中的標準庫)。 如果我們嘗試通過代理(如Charles)連接移動設備,我們會看到所有流量,但是它是加密的 - 正如預期的那樣。 但是,如果我啓用SSL代理,生成根證書並在設備上安裝該證書,我將通過查爾斯以明文形式查看所有數據 - 如預期的那樣。保護移動應用程序免遭中間人攻擊
問題是,如何防止這種情況? 當然,主要目標是僅當設備調用允許服務器使用該服務器的有效證書時才公開數據。
,以防止這種情況的唯一途徑是通過certificate pinning,但如果攻擊者能夠安裝之前您連接在第一次到你的API根證書,你仍然可以MiM'ed。
如果攻擊者具有對設備的訪問級別,則防止出現這種情況的唯一方法是使用SSL拇指打印。您將啓動到服務器的連接。檢索SSL證書並將其與應用程序代碼中的硬編碼值進行比較。如果這不匹配中止連接並且不發送數據。
但是,這個問題是SSL更新的開銷。您需要以新的指紋值嚮應用程序發佈更新。這也會阻止人們使用該應用,直到他們更新到最新版本。
這是否意味着沒有辦法來防止這種情況?無論解決方案有多複雜。 –
怎麼會有?證書的信任鏈會告訴您是否信任您要連接的服務器。但是,如果有人能夠在首次連接之前安裝根證書,則無法確定信任鏈是否真實。 – MvdD
對於能夠修改設備上的根證書的人來說,他們已經擁有對設備的高級訪問權限,並且如果他們真的想要,也可以在不考慮使用的SSL的情況下進行破壞。 – Peter