반응형
http 요청은 잘 되는데 https 요청 시 아래 오류 발생
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException:Trust anchor for certification path not found
원인 : Connection 하는 웹사이트의 Certificate 인증서가 안드로이드 단말에 존재하지 않을 경우 발생
해결방법
1. 요청하고자 하는 웹사이트의 인증서 확인 후 다운로드
- 브라우저 주소창에 자물쇠 클릭
- 인증서 정보 클릭
- 세부정보 탭 선택 후 내보내기 버튼 클릭
2. 프로젝트에 인증서 복사
- res > raw 위치에 인증서 붙여넣기
3. Connection 시 인증서 정보 setting
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = getResources().openRawResource(R.raw.maandoo);
Certificate ca = cf.generateCertificate(caInput);
// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null,null);
keyStore.setCertificateEntry("ca", ca);
// Create a TrustManager that trusts the CAs in our KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
// Create an SSLContext that uses our TrustManager
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), new java.security.SecureRandom());
caInput.close();
URL requestUrl = new URL(url + param);
HttpsURLConnection urlConnection = (HttpsURLConnection)requestUrl.openConnection();
urlConnection.setSSLSocketFactory(sslContext.getSocketFactory());
InputStream is = urlConnection.getInputStream();
반응형
'Android' 카테고리의 다른 글
[Android] Notification 에 RemoteViews 사용 시 이미지 삽입 (0) | 2019.07.23 |
---|---|
[android] retrofit2 JSONP 데이터 파싱 (0) | 2019.07.09 |
[android] YouTubePlayerFragment fullscreen error 유튜브 API 전체화면 오류 (0) | 2019.06.04 |
[Android Fcm]FirebaseApp name [DEFAULT] already exists! (0) | 2019.05.27 |
안드로이드 전화번호부에 저장된 이름 가져오기 (0) | 2014.03.13 |