안드로이드 HTTPS WebView 질문드립니다
public class NewSSLSocketFactory extends SSLSocketFactory {
private SSLContext sslContext=SSLContext.getInstance("TLS");;
private X509Certificate cert;
private PrivateKey privateKey;
public PrivateKey getPrivateKey() {
return privateKey;
}
public X509Certificate getCert() {
return cert;
}
private KeyStore setCert(){
String skuCertBin ="-----BEGIN CERTIFICATE-----\n"+
"SOMETHING CODE"+
"-----END CERTIFICATE-----";
KeyStore trustStore=null;
try {
ByteArrayInputStream derInputStream = new ByteArrayInputStream(skuCertBin.getBytes());
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
cert = (X509Certificate) certificateFactory.generateCertificate(derInputStream);
String alias = cert.getSubjectX500Principal().getName();
trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
trustStore.setCertificateEntry(alias, cert);
Key key = trustStore.getKey(alias, null);
if ( key instanceof PrivateKey)
privateKey = (PrivateKey)key;
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}
return trustStore;
}
public NewSSLSocketFactory() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
super();
KeyStore trustStore = setCert();
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trustStore);
sslContext.init(null, tmf.getTrustManagers(), null);
}
// UNDER DEFAULT METHODS
}
클래스를 만들어 HttpsURLConnection.setDefaultSSLSocketFactory(new NewSSLSocketFactory()); 를 호출하는 식으로
Jsoup를 통해 안드로이드 앱에서 파싱을 하고 있습니다.
자바스크립트 사용때문에 WebView를 활용하고자 하는데 WebView에 인증서를 적용 시키는 방법이 아무리 찾아도 안나와서 질문 드립니다.
@Override
public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) {
Log.d("WebViewCheck", "onReceivedClientCertRequest Call");
request.proceed(privateKey, cert);
}
위의 method는 Log가 찍히질 않는걸로 보아 진입이 안되고
가장 많이 보이는 해결책인 onReceivedSslError method의 경우에는 경고창이 떠서 사용을 하지못합니다.
WebView에 self-signed(정확히는 학교 홈페이지에서 사용하는) 인증서 를 적용시킬 방법이 없을까요
수정이 안되네요;;
댓글 달기