Help us understand the problem. What is going on with this article?

Volley でオレオレ証明書の検証スキップ

More than 5 years have passed since last update.

業務で Android アプリを作成していると development (開発) サーバなどで所謂独自 (オレオレ) 証明書を使っていることがよくある。普通に HTTPS アクセスしに行くと SSLHandshakeException がスローされ失敗する。その為証明書検証をスキップして接続する必要が出てくる。当然本番環境ではそのような SSL 証明書は使用されないので、開発環境の為だけの 本来の開発と関係ない作業 をやらされるのが辛い。手っ取り早くやっつけたいところだ。

Volley でどうやるのか分からなかったので調べてみた。Volley.newRequestQueue() に詰める HurlStack インスタンスに対してオレオレ証明の検証をスキップする SSLSocketFactory を詰めるといいようだ。

private static SSLSocketFactory getAllAllowsSocketFactory() {
    try {
        // ホスト名検証をスキップする
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });

        // 証明書検証スキップする空の TrustManager
        final TrustManager[] manager = {new X509TrustManager() {

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                // do nothing
            }

            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                // do nothing
            }
        }};
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, manager, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
        return sslContext.getSocketFactory();
    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        throw new AndroidRuntimeException(e);
    }
}

このメソッドを以下のように使用する:

final HurlStack stack = new HurlStack(null, getAllAllowsSocketFactory());

// アプリケーションレベルで Singleton 保持するのがよい
sQueue = Volley.newRequestQueue(context, stack);
kojionilk
Android, Java, PHP あたりのプログラマ。Python の思想が好み。開発環境として OS X や Ubuntu を使う。
http://www.kojion.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away