iOS10.3以降でCharlesが使えない場合の対処法


iOS10.3以降でCharlesを使ってSSL通信内容をデバッグ確認しようとしましたが、
以前はうまく使えていたのに今回はキャプチャできずハマったのでメモします。

事象

以下のエラーが表示され、SSL通信が確認できない

SSLHandshake: Received fatal alert: certificate_unknown

原因

iOS10.3からルート証明書の信頼をする設定が必要になったため。

設定方法

設定アプリ > 一般 > 情報 > 証明書信頼設定 からCharlesのルート証明書をオンにする。

ダイアログが表示されるので、「続ける」をタップ。

その他チェックリスト

上記の証明書の信頼設定以外での確認項目です。
基本的な設定方法はこちらの公式サイトから確認できます。
https://www.charlesproxy.com/

  • PCとiOS端末が同じネットワークに接続しているか
    (iOS端末が4GでPCが社内Wifiになっていないか、VPN環境でないか)

  • iOS端末のネットワーク設定で、HTTPプロキシ設定をしているか
    (PCのIPアドレスとCharlesで設定したポート番号を指定)
    iOS側の設定箇所設定 > Wi-Fi > 接続中のWifiのiアイコン > HTTPプロキシ
    Charles側の設定箇所Proxy > Proxy Settings...

  • iOS端末にCharlesのルート証明書をインストールしているか
    ※証明書をインストールする際はCharlesに接続している状態で行う必要があるようです。
    http://www.charlesproxy.com/getssl

  • Charlesの設定でEnable SSL Proxingにチェックを入れているか
    Proxy > SSL Proxings Settings

  • Charlesの設定でSSLプロキシを有効にするホスト名を追加しているか
    Proxy > SSL Proxings Settingsaddから*を指定)