android 웹서비스 url 요청시 ssl 인증서(https) 에러 문제
서버에 ssl 보안 인증을 설치한 후 https:// 로 android 에서 웹서비스 url 요청시 응답이 오지 않는 문제 원인은 응답이 오기전에 인증서 에러 페이지가 로드되면서 에러 발생 해당 소스 추가해서 해결 앱 실행시 onCreate 부분에 postHttps(String url, int connTimeout, int readTimeout); 메소드를 선언해 주면 문제없이 응답이 온다. 아래 소스는 해당 메소드를 가…
서버에 ssl 보안 인증을 설치한 후 https:// 로 android 에서 웹서비스 url 요청시 응답이 오지 않는 문제
원인은 응답이 오기전에 인증서 에러 페이지가 로드되면서 에러 발생
해당 소스 추가해서 해결
앱 실행시 onCreate 부분에
postHttps(String url, int connTimeout, int readTimeout);
메소드를 선언해 주면 문제없이 응답이 온다.
아래 소스는 해당 메소드를 가지고 있는 클래스 소스
package util;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
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.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
//웹서비스 요청시 SSL 인증서 에러 방지
public class SslConnect {
// always verify the host - dont check for certificate
final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
/**
* Trust every server - don't check for any certificate
*/
private static void trustAllHosts() {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[] {};
}
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
}};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
catch (Exception e) {
e.printStackTrace();
}
}
public static HttpsURLConnection postHttps(String url, int connTimeout, int readTimeout) {
trustAllHosts();
HttpsURLConnection https = null;
try {
https = (HttpsURLConnection) new URL(url).openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
https.setConnectTimeout(connTimeout);
https.setReadTimeout(readTimeout);
}
catch (MalformedURLException e) {
e.printStackTrace();
return null;
}
catch (IOException e) {
e.printStackTrace();
return null;
}
return https;
}
}