Jak uzyskać dostęp do połączenia SSL za pośrednictwem systemu Android?

Zacząłem podążać za samouczkiem, który nie był związany z Androidem i dostałem to:

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

To chyba sprowadza się do kilku pytań:

  1. Nie mam stworzonego własnego sklepu zaufania, ale przeglądając samouczki i rzeczy online, nie jestem pewien, jak go utworzyć. Czy istnieje sposób, w jaki mogę utworzyć lub zmodyfikować sklep zaufania, aby mieć w nim potrzebne certyfikaty? (Używam własnoręcznie podpisanego certyfikatu, jeśli to robi jakąś różnicę)

  2. Jak Czy Mogę sprawić, że rzeczy z SSL handshake działają płynnie? W tej chwili pojawia się błąd:

    javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    
    Szczerze mówiąc, nie bardzo rozumiem, co to znaczy.
  3. Jakie ustawienia lub pliki muszę zmodyfikować na moim urządzeniu z Androidem, aby upewnić się, że to połączenie może się zdarzyć?

Author: Joachim Sauer, 2011-06-22

2 answers

1) to zależy. Czy masz certyfikat własnoręcznie podpisany po stronie serwera i próbujesz zweryfikować swoją tożsamość na urządzeniu z Androidem? A może po stronie Androida próbujesz zweryfikować swoją tożsamość na serwerze? Jeśli jest to pierwsze, zobacz ten link: http://www.codeproject.com/KB/android/SSLVerification_Android.aspx?display=Mobile

Należy zwrócić szczególną uwagę na to, gdzie tworzy plik KeyStore.

2) powód, dla którego dostajesz ten błąd to dlatego, że nie ufa serwerowi, z którym się łączysz, ponieważ nie utworzyłeś poprawnie truststore lub łączysz się z serwerem, którego certyfikat nie został dodany do truststore. Z czym dokładnie próbujesz się połączyć?

3) Upewnij się, że masz <uses-permission android:name="android.permission.INTERNET" /> w manifeście.xml.

Edytuj Przepraszam, proszę o zapoznanie się ze zmianami, które wprowadziłem do pierwszego akapitu.

Oto część do zainicjowania keystore i 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>".toCharArray());
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>".toCharArray());
keyManagerFactory.init(keyStore, "<yourpassword>".toCharArray());

sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
 11
Author: Otra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-22 16:48:55

Nie potrzebujesz własnego truststore, chyba że partner używa certyfikatów podpisanych samodzielnie. JRE jest dostarczany z domyślnie używanym truststore, który ufa certyfikatom wydanym przez wszystkie główne urzędy certyfikacji.

 1
Author: user207421,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-23 01:03:24