CA証明書とandroidの危うい関係
Nexus one上で動作させているandroidアプリケーションからWebサービスを利用するために、とあるサーバそれもSSLサーバに接続しようとした所、以下の例外が発生する。
javax.net.ssl.SSLException: Not trusted server certificate.
同じサーバにWebブラウザからアクセスしてみると、以下のようにディジタル証明書でエラーが発生しているようだ。
ならばと今度はNexus sで同じくサーバに接続するとエラーは発生しない。どういうことだろう。
原因は分かっている。以前から指摘されているが、Androidは端末の発売時期によって(特にFroyo(Android 2.2)以前と以降)でインストールされているCA証明書に差があり、インストールされていない証明書があればエラーになるし、インストールされていたとしても、証明書の暗号強度が1024ビットから2048ビットに変更になったりすると※、やはりルート証明書が信用できない、とエラーになる訳だ。
※1024ビットでは暗号を突破されると以前より指摘されており、近年ルートCA証明書の切り替えが進んでいる。
ASCII.jp:電子証明書に近づく 「暗号アルゴリズム 2010年問題」
ジオトラストSSLサーバー証明書のAndroidスマートフォン対応につきまして
さてと、どのように解決すれば良いだろう。