2012-02-20 3 views
0

나는 안드로이드에서 앱을 개발하는 중이며, KSOAP2 라이브러리를 사용하여 서버와 sslhandshake가 필요합니다.안드로이드의 SSL 연결

http 사이트에서도 동일한 결과를 얻을 수 있지만 "인증서를 확인할 수 없습니다"라는 HTTPS 사이트에서는 오류가 발생합니다.

은 아무도

+0

일부 코드 및/또는 콘솔 출력을 표시하십시오. 감사 –

답변

0

그것은있을 수 있습니다 도울 수 있기 때문에 당신이 캘리포니아가 없을 수 있습니다 액세스하려고하는 사이트 자체 서명 인증서 만 가질 수 있습니다. 자체 서명 인증서를 사용할 때 얻을 수있는 문제입니다.

는이 코드가 도움이 될 수 이미

http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html

http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html

0

구현 한 내용이 링크를 시도하고 우리에게 보여? 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, 다니엘은

1

적어도 이전에 2.3 안드로이드 버전이 다른 사람의 사이의 RapidSSL CA의 루트 CA가없는 유의하시기 바랍니다.

당신은 http://www.digicert.com/help/ 또 다른 빠른 검사가 주식 브라우저에서 HTTPS에서 페이지를로드하고이 인증서에 대한 불평 있는지 확인하는 것입니다

같은 사이트와 문제가있는 인증서 발급자를 확인할 수 있습니다.

이것이 상황에 맞지 않으면이 대답을 무시하십시오.

이 CA에서 서명 한 인증서가있는 경우 중 하나를 수행해야합니다

  1. 핸들이 명시 적으로 Danieles 응답과 같은 일을하고 있지만, 실제로는 또한 RapidSSL에 대한 저장된 하나에 인증서를 비교하여 응용 프로그램 (또는 중의 너는 사용한다).
  2. 해당 웹 서버의 체인에 중간 인증서를 추가하여 GeoTrust에서 RapidSSL 인증서를 인증합니다.

체크 아웃

http://code.google.com/p/android/issues/detail?id=10807 https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&id=AR1549

0

당신은 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(); 
    } 
}