Androidでオレオレ証明のサーバへSSLアクセスする
正確には自己署名証明しているサーバへのHTTPS通信、というのでしょうか。
私はJavaでHTTP通信を行う際にはApache HttpClientを利用していました。AndroidのSDKにもHttpClientが組み込まれていましたので、Android上のHTTP通信もこのAPIを利用していました。
HttpClientでオレオレ証明を受け入れるには、Customizing SSL in HttpClientに記載されているようなコーディングを行います。でないと”javax.net.ssl.SSLException: Not trusted server certificate”といった例外が出ます。
ここに記載されている説明のうち、MySSLSocketFactoryクラスインスタンスはどうやって作成するのか、というと、こちらに実コードがあります(上記サイトの説明とは少し異なりますが)。このコードでは、669行目辺りで、SSLContextインスタンスを引数にとるorg.apache.http.conn.ssl.SSLSocketFactory(javax.net.ssl.SSLSocketFactoryではないことに注意)クラスコンストラクタで生成しています。
そんなわけでAndroidでもSSLSocketFactoryのコンストラクタを利用するか、と考えたのですが、AndroidのSSLSocketFactoryクラスコンストラクタにはそのようなものがありませんでした…
そこで、方向転換して、Java標準APIに含まれているHttpURLConnectionを利用することにしました。
こちらもコードの例がMLに流れていました。”Trusting all Certificates using HttpClient over HTTPS”というトピックがそれです(タイトルに反してHttpClientは使っていません)。
そんなわけで、私はHttpsURLConnectionを用いてnicoroidでHTTPS通信を行っています。
…今APIリファレンスを見直してみると、android.net.httpパッケージにそれっぽいクラスがありますね。もしかするとこれを使えばHttpClientでも同様のことができるかもしれません。
[追記 2011/3/1]
最近仕事用のPCからと思われるこのページへのアクセスが多くなっているようです。お疲れ様です。アクセスが増えた時期から考えるに、Android Market関連でしょうか…
ここに記載したものより、以下のcrckylさんのエントリの方が詳しく説明されていますので、ご参考に。
その他、こちらでもサンプルコード書かれている方がいらっしゃいました。
kanatokoさんの書かれたエントリの内容も、昔やろうとして中座していたことなので試してみたいです。
…というか、ここに追記していかなくても現在では普通に検索すればたくさんヒットしますね。
[追記 20011/6/14]
本文では諦めた、”MySSLSocketFactory”の作り方について説明されています。
といか本文、リンク切れまくってて既に全く役に立っていませんね…まあ、現在では色んな方が解説されているので更新しなくても良いっすよね?
« coroid ver.0.5.1, nicoroid ver.0.2.0 認証機能対応 | トップページ | nicoroid/lite ver.0.2.2 他Androidアプリとの連携強化 »
この記事へのコメントは終了しました。
« coroid ver.0.5.1, nicoroid ver.0.2.0 認証機能対応 | トップページ | nicoroid/lite ver.0.2.2 他Androidアプリとの連携強化 »
コメント