2012-02-15 2 views
1

Я получаю это на LogCat когда httpsURLConnection.getInputStream() называетсяSSL не работает на Android 2.2 (только в версии 2.3)

SSL handshake failure: Failure in SSL library, usually a protocol error error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate (external/openssl/ssl/s3_pkt.c:1127 0x29eb40:0x00000003)

Я испытал это на Andorid 2.3, и это работает прекрасно.

Мой сервер требует аутентификации клиента! Может быть, FROYO не поддерживает это рукопожатие ... Я не знаю ...

Я также попытался использовать httpclient. Сбой в любом случае ...

private void process() throws Exception { 

    char[] pass = "clientpass".toCharArray(); 

    InputStream ksStream = getAssets().open("clientKeyStore.bks"); 
    KeyStore keyStore = KeyStore.getInstance("BKS"); 
    keyStore.load(ksStream, pass); 
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    kmf.init(keyStore, pass); 
    ksStream.close(); 

    X509TrustManager[] tm = 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]; 
     } 
    } }; 

    SSLContext context = SSLContext.getInstance("TLS"); 
    context.init(kmf.getKeyManagers(), tm, null); 
    HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); 
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 
     public boolean verify(String hostname, SSLSession session) { 
      return true; 
     } 
    }); 

    URL url = new URL("https://192.168.2.101:8443/RestTomcat/resources/veiculos/KKK1234"); 
    HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream())); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while ((line = br.readLine()) != null) 
     sb.append(line + "\n"); 
    br.close(); 

    Log.e("OUTPUT", sb.toString()); 
    httpsURLConnection.disconnect(); 
} 
+0

Является ли сбой в журнале Logcat или сервера Android? И в какой строке кода это происходит точно? – Jakar

+0

@Jakar Обновлено! Я получаю это в LogCat, когда вызывается httpsURLConnection.getInputStream(). – CelinHC

+0

Я думаю, что существует разница между доверенными ЦС. Кто подписал этот сертификат? – rekire

ответ

2

Убедитесь, что дата, время и часовой пояс настройки правильны на 2.2 устройства.

+0

Точно так же в обоих устройствах ... Galaxy Tab (Android 2.2) и Nexus S (Android 2.3) – CelinHC

0

Я не уверен, что вы нашли ответ, но это, похоже, ошибка с Android 2.2, не анализирующая полную цепочку сертификатов. Если у вас .p12 cert есть несколько цепей, Android 2.2, похоже, не следит за всей цепочкой.

У меня была такая же проблема, что я задал вопрос в this SO question. Я попросил нашего администратора создать новый клиентский сертификат, который напрямую выдается Root CA без использования Sub CA, а затем 2.2 будет работать. Тем не менее, вопрос о безопасности наличия сертификата клиента без Sub CA в качестве посредника.

ОБНОВЛЕНИЕ: Команда Android подтверждает, что это проблема в 2.1/2.2. Подробности находятся в following issue tracker

+0

В моем случае у меня есть самозаверяющий сертификат ... Так что я потерялся? – CelinHC

+0

есть другое обходное решение, заменив оригинальную реализацию Android Socket на другие, которые я закончил, так как в конце они все еще хотят получить более безопасную Sub-CA для корневой цепочки CA. Шаги довольно активно, но он работает (пока). Дайте мне знать, если вы заинтересованы в этом, и я мог бы ответить на этот вопрос. Я также опубликовал ошибку в Android, которую они подтверждают, что это [проблема в версии 2.1/2.2] (http://code.google.com/p/android/issues/detail?id=26542) – momo

+0

Я бы хотел попробовать этот подход... – CelinHC

Смежные вопросы