SSL検証のトラブルシューティング
このページでは、AndroidアプリでSSL証明書が適切に検証されない問題を解消する方法について説明します。この問題の詳細については、http://www.kb.cert.org/vuls/id/582497(英語のみ)を参照してください。
トラブルシューティングの手順
AndroidアプリでSSL証明書が適切に検証されない問題(上記のリンクを参照)を解消するには、次の手順に従います。
-
SSLトラフィックが次のライブラリのいずれかで作成されているかどうかを確認します。
- Flurry CVE-2014-6024
- Chartboost CVE-2014-6025
- AdColony CVE-2014-5524
- MoMinis/Playscape CVE-2014-5525
- TapJoy CVE-2014-5527
- InMobi CVE-2014-5526
- Appsflyer CVE-2014-5528
- Zopim CVE-2014-5530
- Fiksu CVE-2014-5814
-
SSLトラフィックが上記のいずれかで作成されている場合は、問題のあるライブラリのバージョンをCVE(脆弱性情報データベース)で調べ、ライブラリの修正版があれば、そのバージョンにアップグレードしてください。
- 検証されていないSSLトラフィックがすべて上記のライブラリのいずれかにある場合は、ライブラリをアップグレードしてから、Amazonにアプリを再申請してください。
-
検証されていないSSLトラフィックの一部が上記のライブラリのいずれにも含まれていない場合は、トラフィックの安全性を確保するため、ユーザーのデータを保護する予防措置を講じてください。
購入したSSL証明書を使用する場合は、SSLに依存するコードをtry/catchブロックでラッピングし、SSLExceptionが発生したときに、アプリがネットワーク経由でデータを送受信しないようにします。
- SSLトラフィックに自己署名する場合は、CA証明書をアプリのアセットディレクトリに保存し、その証明書を使って、try/catchブロック内でSSLトラフィックを検証します。証明書に信頼性がない場合は、トラフィックを許可しないでください。Androidアプリの安全な設計方法やコーディング方法(自己署名SSLトラフィックの検証方法の例など)については、http://www.jssec.org/dl/android_securecoding_en.pdf(英語のみ)のセクション5.4を参照してください。
- 既知のCAによる証明書を自身のトラフィックに使用して、脆弱性のあるCAホストに基づく攻撃を防ぐ場合は、そのCAによるSSL証明書をピニングしてください。
この脆弱性については、http://www.kb.cert.org/vuls/id/582497(英語のみ)を参照してください。
SSLトラフィックの適切な検証方法については、http://developer.android.com/training/articles/security-ssl.htmlを参照してください。
アプリや他のプラットフォームのアプリにSSL証明書をピニングする方法については、https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning(英語のみ)を参照してください。