web-dev-qa-db-ja.com

SSLプロキシ/チャールズとAndroidのトラブル

Charlesプロキシツールを使用して、AndroidデバイスからのHttps呼び出しをテストしたい。アプリをデバッグするための生の要求/応答の内容を確認する必要があります。 [プロキシ設定]-> [SSL]タブの下にホストとポートを追加して、Charlesを構成しました。アプリを実行すると、すべてのSSL呼び出しがチャールズからすぐに消えるようです。この問題を修正する方法はありますか? Charlesのドキュメントには、Androidデバイスに関する情報がないようです。

59
bianca

私は問題を考え出した。その理由は、Charles 3.7にはAndroidデバイスのバグがいくつかあるためです。 Charles 3.8ベータ版に更新しましたが、うまく機能しているようです。

1
bianca

android7用

参照: charlesプロキシをAndroid 7 nougatで動作させる方法

android7より下のAndroidバージョンの場合

コンピューターから、Charlesを実行します:

  1. プロキシ設定を開きます:[プロキシ]-> [プロキシ設定]、[プロキシ]タブ、[透過的なHTTPプロキシを有効にする]をオンにし、中心にある[ポート]を記憶します。 enter image description here

  2. SSLプロキシ設定:プロキシ-> SSLプロキシ設定、SSLプロキシタブ、「SSLプロキシを有効にする」にチェックマークを付け、をロケーションに追加: enter image description hereenter image description here

  3. アクセス制御設定を開きます:プロキシ->アクセス制御設定。ローカルサブネットを追加して、ローカルネットワーク上のマシンが別のマシン/モバイルからプロキシを使用することを許可します。 enter image description here

Android Phone

  1. モバイルの設定:[設定]-> [無線とネットワーク]-> [WiFi]->ネットワークに接続または変更し、コンピューターのIPアドレスとポート(8888)を入力します: enter image description here

  2. Charles SSL証明書を取得します。モバイルブラウザから次のURLにアクセスしてください。 http://charlesproxy.com/getsslenter image description here

  3. 「証明書に名前を付ける」に必要なものを入力します

  4. セキュリティ警告を受け入れて、証明書をインストールします。正常にインストールすると、おそらくそのようなsthが表示されます。お使いの携帯電話で、[設定]-> [セキュリティ]-> [信頼できる資格情報]: enter image description here

できた.

その後、携帯電話でテストを行うことができます。暗号化されたhttpsリクエストがCharlesに表示されます: enter image description here

69
User9527

編集-この回答は、Charlesの以前のバージョンに対するものでした。 v3.10.xの適切な手順については、以下の@ semicircle21の回答を参照してください-このアプローチよりもはるかに簡単です... :-)

ここで価値があるのは、このための手順ごとの指示です。 iOSでも同様に適用されるはずです。

  1. チャールズを開く
  2. [プロキシ]> [プロキシ設定]> [SSL]に移動します
  3. 「SSLプロキシを有効にする」をチェックします
  4. [場所を追加]を選択し、ホスト名とポートを入力します(必要な場合)
  5. [OK]をクリックして、オプションがオンになっていることを確認します
  6. ここからCharles certをダウンロードします。 Charles cert>
  7. そのファイルをメールで自分に送信します。
  8. デバイスで電子メールを開き、証明書を選択します
  9. 「証明書に名前を付ける」に必要なものを入力します
  10. [OK]をクリックすると、証明書がインストールされたというメッセージが表示されます。

これで、CharlesでSSLファイルを見ることができるはずです。値をインターセプトして変更したい場合は、「Map Local」ツールを使用できます。

  1. Charlesで、[ツール]> [ローカルにマップ]に移動します。
  2. [エントリを追加]を選択します
  3. 置き換えるファイルの値を入力します
  4. [ローカルパス]で、代わりにアプリに読み込むファイルを選択します
  5. OKをクリック
  6. エントリが選択されていることを確認し、[OK]をクリックします
  7. アプリを実行する
  8. 「Notes」に、ライブファイルではなくファイルがロードされることが表示されます。
43
bkurzius

@bkurziusの回答に感謝し、このアップデートはCharles 3.10+用です。 (理由は ここ

  1. チャールズを開く
  2. [プロキシ]> [SSLプロキシ設定]に移動します。
  3. 「SSLプロキシを有効にする」をチェックします
  4. [場所を追加]を選択し、ホスト名とポートを入力します(必要な場合)
  5. [OK]をクリックして、オプションがオンになっていることを確認します
  6. [ヘルプ]> [SSLプロキシ]> [Install Charles Root Certificate on a Mobile Device or Remote Browser...]に移動し、指示に従ってください。 (Androidのブラウザーを使用して、証明書をダウンロードしてインストールします。)
  7. 「証明書に名前を付ける」に必要なものを入力します
  8. [OK]をクリックすると、証明書がインストールされたというメッセージが表示されます。
27
semicircle21

こちらをご覧ください:

http://jaanus.com/blog/2012/02/12/debugging-http-on-an-Android-phone-or-tablet-with-charles-proxy-for-fun-and-profit/

Charles.crt証明書をデバイスにインストールする必要があります。

7
otso

上位の回答は完璧に機能しています(少し古いですがまだ機能しています)が、Android N以降、diff信頼SSL証明書を持つようにアプリを設定できます(リリース用、デバッグのみなど)、Charles SSL Proxy証明書を含む(Charles証明書をダウンロードし、.pemファイルをrawフォルダーに配置した場合)。詳細はこちらをご覧ください: https://developer.Android.com/training/articles/security-config.html

また、Charlesの公式ドキュメントは、これをセットアップするのに役立ちます。 https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

これが、すべてのAndroidデバイスではなく、アプリプロジェクト内でCharlesをセットアップするのに役立つことを願っています。

3
Sniper

新しいエミュレータでは、次を使用してコマンドラインから起動すると役立つ場合があります。

emulator -netdelay none -netspeed full -avd <emulator_name> -http-proxy http://<ip-address>:8888

上記の@ User9527のアドバイスに従って、セットアップの残りの部分にも必ず従ってください。

0
AllDayAmazing

私にとって問題は、チャールズがプロキシ設定でルーティングするように指示していたIPアドレスが間違っていたことです。解決するために、私は端末でifconfigに行き、現在のアクティブな接続のポート8888で異なるIPアドレス(inetの横にリストされている)を試しました。

0