SSLHandshakeExceptionの対応例

watanabe 1,888views 更新:2014年12月2日
HttpsURLConnection con = (HttpsURLConnection)Url.openConnection();

のようにHttpsURLConnectionを用いて接続するとき、証明書エラーが生じるとSSLHandshakeExceptionという例外が発生します。

このときそのまま接続を行いたいのであれば証明書を無視した接続を行います。

以下のコードが証明書を無視した接続例です。

private static HttpURLConnection getHttpsConnection(String url) throws Exception {

    HttpURLConnection urlconn = null;
    URL connectURL = new URL(url);

    if ("https".equals(connectURL.getProtocol())) {
      TrustManager[] tm = { new X509TrustManager() {
        @Override
        public X509Certificate[] getAcceptedIssuers() {
          return null;
        }
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
        }
        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
        }
      } };
      SSLContext sslcontext = SSLContext.getInstance("SSL");
      sslcontext.init(null, tm, null);
      HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession session) {
          return true;
        }
      });

      urlconn = (HttpsURLConnection) connectURL.openConnection();
      ((HttpsURLConnection) urlconn).setSSLSocketFactory(sslcontext
        .getSocketFactory());
    } else {
      urlconn = (HttpURLConnection) connectURL.openConnection();
    }

    urlconn.setRequestMethod("GET");
    urlconn.connect();

    return urlconn;
  }


参考:http://symfoware.blog68.fc2.com/blog-entry-1165.html

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません