나는 안드로이드에서 앱을 개발하는 중이며, KSOAP2 라이브러리를 사용하여 서버와 sslhandshake가 필요합니다.안드로이드의 SSL 연결
http 사이트에서도 동일한 결과를 얻을 수 있지만 "인증서를 확인할 수 없습니다"라는 HTTPS 사이트에서는 오류가 발생합니다.
은 아무도
나는 안드로이드에서 앱을 개발하는 중이며, KSOAP2 라이브러리를 사용하여 서버와 sslhandshake가 필요합니다.안드로이드의 SSL 연결
http 사이트에서도 동일한 결과를 얻을 수 있지만 "인증서를 확인할 수 없습니다"라는 HTTPS 사이트에서는 오류가 발생합니다.
은 아무도
그것은있을 수 있습니다 도울 수 있기 때문에 당신이 캘리포니아가 없을 수 있습니다 액세스하려고하는 사이트 자체 서명 인증서 만 가질 수 있습니다. 자체 서명 인증서를 사용할 때 얻을 수있는 문제입니다.
는이 코드가 도움이 될 수 이미http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
구현 한 내용이 링크를 시도하고 우리에게 보여? https://github.com/mixare/mixare/blob/master/src/org/mixare/MixContext.java
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){
public boolean verify(String hostname, SSLSession session) {
return true;
}});
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new X509TrustManager[]{new X509TrustManager(){
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}}}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(
context.getSocketFactory());
이 코드는 자체 서명 된 인증서를 받아 mixare.org에 사용됩니다.
이 방법을 사용할 때 MITM 공격으로부터 안전하지 않다는 점에 유의하십시오.
HTH, 다니엘은
적어도 이전에 2.3 안드로이드 버전이 다른 사람의 사이의 RapidSSL CA의 루트 CA가없는 유의하시기 바랍니다.
당신은 http://www.digicert.com/help/ 또 다른 빠른 검사가 주식 브라우저에서 HTTPS에서 페이지를로드하고이 인증서에 대한 불평 있는지 확인하는 것입니다
같은 사이트와 문제가있는 인증서 발급자를 확인할 수 있습니다.
이것이 상황에 맞지 않으면이 대답을 무시하십시오.
이 CA에서 서명 한 인증서가있는 경우 중 하나를 수행해야합니다
체크 아웃
http://code.google.com/p/android/issues/detail?id=10807 https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&id=AR1549
당신은 SelfSignedCertificate를 사용할 수 있습니다. 이 방법을 HTTP 클라이언트로 사용하십시오.
public static HttpClient getNewHttpClient() {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
return new DefaultHttpClient(ccm, params);
} catch (Exception e) {
return new DefaultHttpClient();
}
}
일부 코드 및/또는 콘솔 출력을 표시하십시오. 감사 –