プロキシでhttps通信内容をチェックする場合、Androidアプリで動作できないものがある

ALL
スポンサーリンク

通信内容のキャッシュや不要な広告除去のために、暗号化されたhttps通信にプロキシサーバが介入するには、次のサイトで設定が説明されています。
ただし、これらの設定でも、Androidアプリには通信できずに動作できないものがあります。

Squid サービスでの SSL Bump の設定
アドネットワークからの侵略を防衛するでゲソ! ~Squidで広告ブロックプロキシを建てる~ – 駄文にゅうす
Squid+SSL-BUMPを使って、httpsなサイトでも広告をブロック | web net FORCE
Privoxy が HTTPS Inspection に対応したので試してみた | KUSONEKOの見る世界
mitmproxyでhttps対応Data Compression Proxyを作る – Qiita

例えば、google map では次のようにエラーになります。

googleカレンダーでは次のように画面下側に同期エラーの表示が出て失敗します。

https通信内容のチェックのためには、プロキシで一旦暗号化を解除して内容チェックし、 プロキシサーバ用に用意した証明書で再暗号化をします。
一部のアプリでは、不正に発行された証明書からアプリを保護するために、ピン留め/Pinningと呼ばれる、アプリが規定した証明書でしか受け付けない動作をするものがあり、 再暗号化で使用した証明書では動作しません。

HTTPS と SSL を使用したセキュリティ  |  Android デベロッパー  |  Android Developers
Certificate and Public Key Pinning | GMOグローバルサインブログ

この場合、Androidの設定で信頼できる認証情報に、プロキシサーバで用いる証明書を追加してもダメです。
従って、 ピン留め/Pinning を採用しているAndroidアプリに対しては、https通信はプロキシサーバで処理させず、そのままスルーさせる必要があります。
例えば、google関係では次のドメインを除外する必要があるようですが、これだけでは足りないみたいでした。
また、他のアプリでは何を除外すべきかを調べる必要があります。

1)ホスト名の許可リストを設定する – Google Chrome Enterprise ヘルプ
https – Android: Connecting to Squid proxy with SSL bumping not working – Stack Overflow

プロキシサーバにmitmproxy(mitmdump)を使う場合は、プロキシサーバでの処理対象から自動的に除外することができます。次回以降、その設定について説明します。

Chromeブラウザでは通信できるようなので(2021年8月現在)、 Chromeブラウザでアクセスする手もあります。
Firefox ではダメでした。 Firefoxも ピン留め/Pinning を採用しているようです。
証明書基礎 – infra-service

コメント