モバイルSuicaのSSL復号化問題を解決する。

Cloudflareロゴ画像

Cloudflare Zero TrustのSSL復号化機能を有効にするとiPhoneのモバイルSuicaで残高をチャージする際にエラーが発生します。この問題の解決に取り組みました。

2024年5月16日

Cloudflareゼロトラスト

モバイルSuicaのSSL復号化問題

Cloudflare Zero TrustのSSL復号化機能を有効にするとiPhoneのモバイルSuicaで残高をチャージする際にエラーが発生します。先日のSSL証明書ピンニングについて記事を書きましたが、モバイルSuicaも証明書がアプリ内に埋め込まれているため、Cloudflareが発行した証明書とミスマッチしてエラーが起きていると考えられます。

Suicaをオートチャージにしていて、改札を通過した際や券売機でFelicaを使ったチャージは問題ないようです。

チャージしたい場合にはCloudflare WARPアプリ(1.1.1.1)から保護を無効にすれば良いのですが、そうすると切り替えの手間や、戻し忘れが発生してしまいます。Cloudflareにはユーザー側で保護を無効にさせない機能があり、企業利用の場合はセキュリティを担保できるメリットがあります。これが使えなくなってしまいます。

モバイルSuicaが通信しているサーバを特定し、それをSSL復号化の対象から除外すれば解決すると思われるので、調査してみます。

調査結果

先に結果をお伝えしますと、問題の解決には至りませんでした。Cloudflare Zero TrustでモバイルSuicaに関係しそうな通信をできる限り洗い出し、除外してみたもののエラーは解消されませんでした。 調査の結果特定できた通信先サーバと思わしきドメイン名や原因切り分けの記録をまとめることで、誰かのお役に立てればと思い記事にさせてもらいます。

エラーの発生状況と切り分け

通信ログを追う前に、アプリの動作やCloudflare側でSSL復号化を有効、無効に切り替えた場合の動作を確認してみます。

  • iOS 17、モバイルSuicaアプリVer3.3.0でエラーが発生する。
  • モバイルSuicaのチャージ処理を実行後にしばらく待った後で、エラーが発生する。
  • クレジットカード払い、ApplePay共にエラーが発生する。
  • Suicaの利用履歴照会(SF履歴)機能は問題ないが、グリーン券購入は不明
  • CloudflareでSSL復号化を有効にしているとエラーが発生し、無効化するとエラー解消し問題なくチャージできる。ネットワーク経路に違いはないと考えられるので、SSL証明書関係のエラーと思われる。

CloudflareのGatewayログから通信を調査

Zero TrustのLogs > GatewayからDNSやHTTPのアクセスログを調べられます。

Zero Trust Gateway のログ照会ページ

設定でSSL復号化を無効にしてから、iPhoneでモバイルSuicaのチャージをやってみます。DNSにはDNSへ名前解決したログがしばらくすると記録されます。HTTPにはウェブサーバへリクエストしたログが記録されます。それぞれ使用してるデバイスでフィルターできますが、アプリケーションやエージェントはわからないので、時刻やドメイン名からどのログがモバイルSuicaに関連するものか当たりを付けます。

通信が許可された場合のログ

調査の結果、4つのドメインがモバイルSuicaのチャージに関連していると思われます。モバイルSuica本家のドメイン以外は決済サービスのようです。

  • mobilesuica.com
  • stripe.com
  • stripe.network
  • fnopf.com

判明したドメインへの通信をSSL復号化の対象から除外

GatewayのFirewall Poriciesで特定したドメインを監査除外(Do Not Inspect)とします。そうするとログの結果結果が変わって、Action列の値がBYPASSとなりSSL復号化の対象となっていることが確認できます。

ドメインで除外した後のログ

しかし、エラー解消されず

モバイルSuicaのチャージ処理を行ったタイミングで発生している通信は、すべて監査除外されているようですが、依然としてエラーは解消されませんでした。次のような原因が考えられますが、今回のところは解決を断念しました。

  • HTTPS以外でSSL証明書を使った通信が行われていて、ログにはそれが記録されていない。
  • ログの記録が遅延していたり、何らかの理由で欠損している。

Wiresharkなどのパケットキャプチャできる環境を整えられたら、再度挑戦してみたいと思います。