/*
* Aipo is a groupware program developed by TOWN, Inc.
* Copyright (C) 2004-2015 TOWN, Inc.
* http://www.aipo.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.aimluck.eip.util;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
/**
*
*/
public class ALURLConnectionUtils {
/** User-Agent */
public static final String USER_AGENT =
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; Avant Browser)";
/** Accept-Encoding */
public static final String ACCEPT_ENCODING = "identity";
/**
* HttpURLConnectionまたはHttpsURLConnectionを返す
*
* @param url
* @return HttpURLConnectionまたはHttpsURLConnection
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
* @throws IOException
*/
public static HttpURLConnection openUrlConnection(URL connectURL)
throws NoSuchAlgorithmException, KeyManagementException, IOException {
HttpURLConnection urlconnection = null;
// SSLHandshakeExceptionが発生しないか調べる
urlconnection = (HttpURLConnection) connectURL.openConnection();
try {
urlconnection.getResponseMessage();
} catch (SSLHandshakeException ex) {
// SSLHandshakeExceptionの場合には証明書をチェックしないhttps接続に切り替える
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;
}
});
urlconnection = (HttpsURLConnection) connectURL.openConnection();
((HttpsURLConnection) urlconnection).setSSLSocketFactory(sslcontext
.getSocketFactory());
return urlconnection;
}
}
// http接続の場合
urlconnection = (HttpURLConnection) connectURL.openConnection();
return urlconnection;
}
}