簡體   English   中英

如何讓查爾斯代理與 Android 7 牛軋糖一起工作?

[英]How to get charles proxy work with Android 7 nougat?

Android 7 對證書的處理方式進行了一些更改( http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html ),不知何故我無法讓我的 Charles 代理工作了。

我的.network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

我在調試模式下運行。 但無論如何,我得到javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. .

不用說,我確實從Settings -> Security -> Install from storage安裝了pfx證書。 該證書顯示在User Credentials中,但不顯示在Trusted credentials -> User中。 在我的棒棒糖設備上,證書列在那里。

我正在使用 okhttp3 作為 HTTP 庫。

知道我做錯了什么嗎?

解決方案是不使用 .p12 ,只需使用 Chrome(在 wifi 上配置代理)導航到http://charlesproxy.com/getssl安裝下載的 .pem 文件

我在運行 Android 7.0 的 Nexus 5X 上遇到了完全相同的問題。 之前從 Charles 3.11.5 (Help->SSL Proxying->Export Charles Root certificate and Private key) 導出了 .p12。 當我嘗試從手機(設置->安全->從存儲安裝)安裝 .p12 時,它只出現在“用戶憑據”下,而從不出現在“受信任的憑據”下,當然帶有 Charles 代理的 SSL 不起作用。

Android 7.0 的總“操作方法”如下:

  1. 配置 WiFi + 代理(Charles 需要它的方式)。 連接它。
  2. 在設備上,使用 Chrome 導航到http://charlesproxy.com/getssl ,接受下載 .pem 的請求,然后按“打開”,它會啟動“證書安裝程序”應用程序。 使用它將證書安裝為“VPN 和應用程序”。
  3. 將屬性android:networkSecurityConfig="@xml/network_security_config"放在 Manifest.xml 的<application>
  4. 使用第一篇文章中的內容創建 res/xml/network_security_config.xml(完全正確)。
  5. 啟動 Charles 和應用程序,玩得開心。

PS 檢查設備上的日期/時間。 它應該是正確的。

我編寫了一個腳本,為apk注入了所需的異常,並允許將Charles Proxy與應用程序一起使用。

這是Github https://github.com/levyitay/AddSecurityExceptionAndroid

根據 OP 評論的故障排除線程,答案是僅將代理的 CA 證書安裝為受信任的,而不是其證書 + 私鑰。

這個問題是由兩個因素引起的:

  1. 不僅安裝 MiTM 代理的 CA 證書,還安裝其私鑰(從而使設備上的 VPN 應用程序能夠解密來自其他應用程序的 MiTM 網絡流量)。 您不需要設備上的 MiTM 代理的私鑰。

  2. Android Nougat 的行為更改Settings -> Security -> Install from storageSettings -> Security -> Install from storage ,文件除證書外還包含私鑰。 這種行為變化揭示了上述問題。

在 Nougat 之前,對於包含私鑰和證書的文件, Settings -> Security -> Install from storageSettings -> Security -> Install from storage錯誤地將證書安裝為受信任的服務器身份驗證(例如,HTTPS、TLS,從而使您的 MiTM 成功),此外正確安裝為用於向服務器驗證此 Android 設備的客戶端證書。 在 Nougat 中,該錯誤已修復,並且不再將這些證書安裝為受信任的服務器身份驗證。 這可以防止客戶端身份驗證憑據影響(削弱)服務器連接的安全性。 在您的場景中,這會阻止您的 MiTM 成功。

使問題復雜化的是, Settings -> Security -> Install from storage並沒有為用戶提供明確的方式來指定他們是安裝客戶端身份驗證憑據(私鑰 + 證書鏈)還是服務器身份驗證信任錨(只是一個CA 證書——不需要私鑰)。 因此, Settings -> Security -> Install from storageSettings -> Security -> Install from storage通過假設,如果指定了私鑰,則它必須是客戶端/用戶身份驗證憑據,從而猜測它是在處理客戶端/用戶身份驗證憑據還是服務器身份驗證信任錨. 在您的情況下,它錯誤地假設您正在安裝客戶端/用戶身份驗證憑據而不是服務器身份驗證信任錨。

PS 關於您的網絡安全配置,您可能應該將應用程序配置為在調試模式下也信任“系統”信任錨(調試覆蓋部分)。 否則,應用程序的調試版本將無法工作,除非連接由代理進行 MiTM,其 CA 證書安裝為受信任的 Android 設備。

我也遇到了同樣的錯誤並嘗試了各種方法,直到我讀到以下關鍵消息:“證書顯示在用戶憑據中,但不顯示在受信任的憑據中”。

所以問題是如何讓證書出現在那里,這些是我遵循的步驟:

  1. http://chls.pro/ssl下載模擬器中的證書
  2. 安裝證書和信任
  • 設置應用程序 -> 安全 -> 加密和憑證 -> 安裝證書 -> Select CA 證書選項
  • Select 仍然安裝

在此處輸入圖像描述

  • Select 您在存儲中下載的 Charles 代理證書
  1. 驗證您是否信任該證書
  • 打開 Trusted Credentials -> User Tab,你可以在這里看到你的證書在此處輸入圖像描述
  1. 開始攔截 HTTPS 流量

我使用的是 Android 7.1.1,以下是我在我的設備 (OnePlus One) 上的設置方式 - 沒有更改清單(我的應用程序的目標是 API 21):

在查爾斯代理中:

  1. Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser 此步驟為您提供代理 IP 和端口號,以及指向您應下載 charles 代理 SSL 的位置的鏈接。

在您的手機上:

  1. Wifi Settings > Modify Network > Advanced Options 將代理設置為Manual然后分別在Proxy hostnameProxy port輸入您從 Charles 收到的 IP 和端口號。

  2. (可選)您可能無法訪問 Charles 之前提供的chls.pro/ssl鏈接。 在我的設備上,我總是收到沒有網絡連接的通知。 我將 charlesproxy.com 添加到字段的Bypass proxy for

  3. 在您的瀏覽器上,轉到第 3 步中的鏈接並下載任何必要的證書(如果它在 Chrome 上不起作用,請下載 Dolphin Browser)。您可以使用任何名稱命名您的證書。

回到查爾斯代理:

  1. 如果您的設置默認為提示您進行遠程連接,您應該會收到AllowDeny您的手機使用代理的提示。

您現在可以在 Nougat 7.1.1 上使用 Charles。

對我來說,SSL 代理在release版本變體中不起作用。 debug工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM