# HTTPS リクエスト/レスポンスの SSL エラー

> Proxyman で "SSL Handshake Failed" などの SSL エラーを解決します。Proxyman 証明書がインストールされて信頼されているかを確認し、SSL ピンニングが原因でないかを切り分けます。

## 1. 症状 {#1-problems}

* Proxyman アプリで HTTPS 通信が表示されません。
* HTTPS のリクエストとレスポンスで SSL エラーが発生します。
* Response パネルに **SSL Handshake Failed** または **Possible Certificate Pinning** と表示されます。

![エラーコード -9806 の Client SSL Handshake Failed を表示している Proxyman の Response パネル](https://proxyman.com/docs/assets/Screen%20Shot%202020-04-25%20at%2019.52.38.png)

## 2. 解決方法 {#2-solution}

SSL ハンドシェイクが失敗する原因はさまざまです。以下の手順に沿って、問題の原因を特定してください。

## 2.1 モバイルデバイス {#21-mobile-devices}

### iOS デバイス {#ios-device}

* [iOS セットアップガイド](https://proxyman.com/docs/ja/debug-devices/ios-device)に従い、Proxyman の CA 証明書をデバイスにインストールして信頼してください。
* Facebook、Instagram、Apple、WhatsApp などの人気アプリを傍受しようとしている場合、これらのアプリは SSL ピンニングで保護されているため、傍受できません。
* お使いの iOS アプリが SSL ピンニングを使用していないか確認してください。使用している場合は、無効にしてください。

### iOS シミュレータ {#ios-simulator}

[iOS シミュレータのセットアップガイド](https://proxyman.com/docs/ja/debug-devices/ios-simulator)に従い、Proxyman の CA 証明書をシミュレータにインストールして信頼してください。

### Android デバイス {#android-device}

* [Android デバイスのセットアップガイド](https://proxyman.com/docs/ja/debug-devices/android-device)に従い、Proxyman の CA 証明書をデバイスにインストールして信頼してください。
* 5 番目の手順が完了しているか確認してください（ドメインを次の 2 つのファイルに追加します：**res/xml/network\_security\_config.xml** と **AndroidManifest.xml**）。
* 自分が所有していない Android アプリを傍受しようとしている場合、傍受はできません ❌

### Android エミュレータ {#android-emulator}

* [Android エミュレータのセットアップガイド](https://proxyman.com/docs/ja/debug-devices/android-device/automatic-script-for-android-emulator)に従い、Proxyman の CA 証明書をエミュレータにインストールして信頼してください。
* 5 番目の手順が完了しているか確認してください（ドメインを次の 2 つのファイルに追加します：**res/xml/network\_security\_config.xml** と **AndroidManifest.xml**）。
* 自分が所有していない Android アプリを傍受しようとしている場合、傍受はできません ❌

### React Native アプリ {#react-native-app}

* アプリが React Native アプリの場合は、[React Native ガイド](https://proxyman.com/docs/ja/debug-devices/react-native)に従ってください。

### Flutter {#flutter}

* [Flutter セットアップガイド](https://proxyman.com/docs/ja/debug-devices/flutter)に従ってください。

上記のすべての手順を試して確認しても、SSL エラーが発生しますか？

### https://google.com の HTTPS リクエスト/レスポンスがエラーなく表示されるか確認する {#verify-that-youre-able-to-see-https-requestresponse-from-httpsgooglecom-without-any-errors}

1. デバイスを用意します。
2. Web ブラウザを開きます（iOS では Safari、Android では Google Chrome）。
3. **https://google.com** にアクセスします。
4. macOS 版 Proxyman で、リクエストを右クリックし、このドメインの **Enable SSL Proxying** を選択します。その後、ページを再読み込みします。
5. HTTPS のレスポンスが表示されるか確認します。

#### ✅ 成功 {#-success}

1. https://google.com の HTTPS レスポンスが表示されれば、証明書は正しく設定されています ✅
2. 問題はアプリ側にある可能性があります。対象のドメインやアプリで再度お試しください。それでも SSL エラーが発生する場合、アプリは SSL ピンニングで保護されている可能性が高いです。
3. SSL ピンニングが原因ではないと思われる場合は、[GitHub](https://github.com/ProxymanApp/Proxyman/issues) で issue を作成してください（デバイス、OS のバージョン、アプリ名などをお知らせください）。

#### ❌ 失敗 {#-failed}

* Proxyman 証明書がデバイスに正しくインストールされていないか、正しく信頼されていない可能性があります。[2.1 モバイルデバイス](https://proxyman.com/docs/ja/troubleshooting/get-ssl-error-from-https-request-and-response#21-mobile-devices)に戻り、手順に従ってください。
* すべて完了しているのに SSL エラーが発生する場合は、[GitHub](https://github.com/ProxymanApp/Proxyman/issues) で issue を作成してください（デバイス、OS のバージョン、アプリ名などをお知らせください）。

## 2.2 MacBook または Windows PC {#22-macbook-or-windows-pc}

次の環境で SSL エラーが発生する場合：

* **Mac（MacBook、Mac mini、Mac Studio）**：Mac に証明書をインストールして信頼してください。[macOS ガイド](https://proxyman.com/docs/ja/debug-devices/macos)に従ってください。
* **Windows**：Windows マシンに証明書をインストールして信頼してください。[Windows ガイド](https://proxyman.com/docs/ja/proxyman-windows/install-certificate)に従ってください。
* Java：[Java VM ガイド](https://proxyman.com/docs/ja/debug-devices/java)に従ってください。
* Firefox：[Firefox ガイド](https://proxyman.com/docs/ja/debug-devices/firefox)に従ってください。
* Python：[Python ガイド](https://proxyman.com/docs/ja/debug-devices/python)に従ってください。
* Ruby：[Ruby ガイド](https://proxyman.com/docs/ja/debug-devices/ruby)に従ってください。

> **警告:** 一部のネットワークライブラリ（Ruby、NodeJS、Python、Golang）は、デフォルトでは自己署名証明書を信頼しません。ライブラリに対して、証明書を信頼するよう設定する必要があります。
>
> \=> 解決するには、[Automatic Setup](https://proxyman.com/docs/ja/automatic-setup/automatic-setup) を使用してください。**Setup** → **Automatic Setup…** → **Open New Terminal…** の順に操作し、開いた Terminal でスクリプトを実行します。対応している NodeJS、Python、Ruby、Golang のライブラリについては、証明書の信頼設定が自動で行われます。その他のライブラリについては、**"\<Your framework/library> self-signed certificate"** で検索してください。

## 2.3 SSL ピンニングが原因ですか？ {#23-ssl-pinning}

* アプリの HTTPS レスポンスがまだ表示されない場合、アプリは [SSL ピンニング](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning)で保護されている可能性があります。SSL ピンニングを使うと、MitM アプリがコンテンツを参照できなくなります。Facebook、Apple、Instagram、Messenger などの人気アプリの多くが SSL ピンニングを使用しています。
* アプリで一時的に **SSL ピンニングを無効化** して、再度お試しください。

SSL ピンニングの詳細は、次の記事をご覧ください：[SSL ピンニングで iOS の中間者攻撃を防ぐ方法](https://www.kodeco.com/1484288-preventing-man-in-the-middle-attacks-in-ios-with-ssl-pinning)

> **備考:** すべて試しても原因がわからない場合は、[GitHub で issue を作成](https://github.com/ProxymanApp/Proxyman/issues)してください。
>
> あわせて、Proxyman の macOS/Windows 版、Proxyman のバージョン、iOS/Android デバイスなどをお知らせください。

## 動画 {#video}

[Video: Proxyman で HTTP と HTTPS の通信をキャプチャする](https://proxyman.com/videos/capture-http-https-traffic) (25 seconds)

## 関連記事 {#learn-more}

* [SSL ピンニングは回避できるのか？](https://proxyman.com/posts/2019-11-15-Can-we-bypass-ssl-pinning)
