2012年01月27日

AndroidでSOAP w/ 自己証明書HTTPSエラー回避

インターネット通信の許可
AndroidManufest.xmlに以下のエントリを追加。
  <uses-permission android:name="android.permission.INTERNET /">

SOAP設定(ksoap2を使用)
・ダウンロード
  ksoap2_jar_2.6.0

・デプロイ
  eclipse/pluginフォルダにダウンロードしたjarをコピーし、プロジェクトのプロパティ「javaのビルドパス」にて「外部jar追加」を行う。

自己証明書HTTPS用の修正(Uncertificated errorの回避方法)
・ダウンロード
kosap2ソースをダウンロードし、以下のソースをプロジェクトに追加する。(各ソース冒頭のpackage名は適宜修正)

HttpsServiceConnectionSE.java
HttpsTransportSE.java
HttpTransportSE.java
ServiceConnection.java
ServiceConnectionSE.java
Transport.java


・全ての証明書を許容する為の修正
HttpsServiceConnectionSE.javaのコンストラクタに以下のコードを追加する。

    public HttpsServiceConnectionSE(String host, int port, String file,
                                     int timeout) throws IOException {

        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null,
                    new TrustManager[]{
                        new X509TrustManager() {
                            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                                return null;
                            }
                            public void checkClientTrusted(
                                java.security.cert.X509Certificate[] certs, String authType) {
                            }
                            public void checkServerTrusted(
                                java.security.cert.X509Certificate[] certs, String authType) {
                            }
                        }
                    },
                    new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.getMessage();
        }

        connection = (HttpsURLConnection) new URL(HttpsTransportSE.PROTOCOL, host, port, file).openConnection();

        connection.setHostnameVerifier(new AllowAllHostnameVerifier());

        updateConnectionParameters(timeout);
    }
posted by rocknfields at 14:48| スマートフォン