반응형
서버에 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; } }
반응형
'Android' 카테고리의 다른 글
[Android] 단말기 고유값 생성(Device Unique ID) (0) | 2013.04.29 |
---|---|
[Android] Network 연결 체크 (0) | 2013.03.11 |
[Android] GPS 설정 체크 (3) | 2013.03.11 |
android webview 로드시 ssl(https) 보안인증서 문제 (5) | 2012.11.14 |
Android app Google Play 등록(안드로이드앱 구글플레이 등록) (2) | 2012.10.23 |