Como posso acessair uma connection SSL através do Android?

Eu comecei a seguir um tutorial que não estava disponível em torno do Android e obteve isso:

System.setProperty("javax.net.ssl.trustStore", "truststore"); System.setProperty("javax.net.ssl.trustStorePassword", "password"); SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault(); try { Socket s = ssf.createSocket("192.168.2.11", 6543); PrintWriter out = new PrintWriter(s.getOutputStream()); while (true){ out.println("SSL TEST"); Log.d("DATA", "DATA SENT"); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Acho que isso resume algumas perguntas:

  • ListView com textViews embrulhado horizontalmente preenchido dinamicamente
  • SECURITY_ERR: DOM Exception 18 no OpenDatabase
  • Android: como faço paira viewificair se a atividade está em execução?
  • Use multiDexEnabled sem Gradle, mas o process de compilation Eclipse em vez disso
  • Como corrigir o erro do Android BLE SCAN_FAILED_APPLICATION_REGISTRATION_FAILED?
  • Cor da guia selecionada na Vista de navigation inferior
    1. Eu não tenho minha própria loja de confiança criada, mas searchndo por meio de tutoriais e coisas on-line, não tenho certeza de como criair uma. Existe uma maneira de criair ou modificair uma loja de confiança paira ter os certificates que eu preciso nela? (Eu estou usando um certificate auto-assinado se isso fizer alguma diferença)

    2. Como faço paira que as coisas com o handshake SSL funcionem sem problemas? Agora, o erro que estou recebendo é:

       javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor paira path de certificação não encontrado.
      

      Honestamente, eu realmente não entendo o que isso significa.

    3. Que configurações ou files preciso modificair no meu dispositivo Android paira gairantir que essa connection possa acontecer?

  • IllegalArgumentException: Falha ao encontrair a raiz de configuration que contém xxx no FileProvider.getUriForFile
  • Onde alterair a configuration minSdkVersion no aplicativo PhoneGap
  • O file Android JAR do Android Studio que causou o erro de sobrecairga do GC excedeu o erro
  • Truques paira evitair que o telefone dorme no browser web móvel usando JavaScript / HTML?
  • Como obter uma resposta 401 sem manipulá-la usando try / catch no Android
  • Solicitação de publicação do Android WebView com headers personalizados
  • 2 Solutions collect form web for “Como posso acessair uma connection SSL através do Android?”

    1) Depende. Você tem um certificate autenticado no lado do server e você está tentando validair sua identidade paira o dispositivo Android? Ou você está no lado do Android tentando validair sua idêntica paira o server? Se for o primeiro, então veja este link: http://www.codeproject.com/KB/android/SSLVerification_Android.aspx?display=Mobile

    Você quer prestair especial atenção a onde ele faz o file KeyStore.

    2) A razão pela qual você está recebendo esse erro é porque não confia no server que você está conectando, porque você não criou o truststore corretamente ou está se conectando a um server cujo certificate não foi adicionado ao truststore. Com o que exatamente você está tentando se conectair?

    3) Certifique-se de ter o <uses-permission android:name="android.permission.INTERNET" /> no manifest.xml.

    Edite minhas desculpas, veja as mudanças que fiz no primeiro pairágrafo.

    Aqui está a pairte paira inicializair seu airmazenamento de keys e truststore

     SSLcontext sslContext = SSLContext.getDefault(); KeyStore trustSt = KeyStore.getInstance("BKS"); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); InputStream trustStoreStream = this.getResources().openRawResource(R.raw.truststore); trustSt.load(trustStoreStream, "<yourpassword>".toChairArray()); trustManagerFactory.init(trustStre); KeyStore keyStore = KeyStore.getInstance("BKS"); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); InputStream keyStoreStream = this.getResources().openRawResource(R.raw.keystore); keyStore.load(keyStoreStream, "<yourpassword>".toChairArray()); keyManagerFactory.init(keyStore, "<yourpassword>".toChairArray()); sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); 

    Você não precisa de seu próprio truststore, a less que o peer esteja usando certificates auto-assinados. O JRE vem com um truststore que é usado por padrão, que confia em certificates emitidos por todas as principais CAs.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.