Autore Topic: Sicurezza SSL con mutual auth client-server  (Letto 417 volte)

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Sicurezza SSL con mutual auth client-server
« il: 03 Febbraio 2015, 10:36:22 CET »
0
Salve

In pratica sto avendo un errore di : No peer certificates. Sto cercando di implementare un mutual auth tra client app e server Tomcat. I passi sono stati:

1) creo il certificato con keytool per il server e lo metto nel keystore del server
2) creo il certificato per il client e lo metto nel keystore del server
3) creo il keystore in BKS per android e ci metto dentro il certificato del server e del client generati prima.

Con il volley framework faccio così:
Codice (Java): [Seleziona]
InputStream keyStore = getResources().openRawResource(R.raw.smartssl); //il mio keystore per android

                // Usually getting the request queue shall be in singleton like in {@see Act_SimpleRequest}
                // Current approach is used just for brevity
                RequestQueue queue = Volley
                        .newRequestQueue(Act_SsSslHttpClient.this,
                                         new ExtHttpClientStack(new SslHttpClient(keyStore, "pass", 443)));

                StringRequest myReq = new StringRequest(Method.GET,
                                                        "https://192.168.1.4:8443/REST/app/generali/getA",
                                                        createMyReqSuccessListener(),
                                                        createMyReqErrorListener()){
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return createBasicAuthHeader("user", "strongpassword");
                }};

                queue.add(myReq);
            }
        });

La classe SslSocketFactory:

Codice (Java): [Seleziona]
class SslSocketFactory extends SSLSocketFactory {
    public SslSocketFactory(InputStream keyStore, String keyStorePassword) throws GeneralSecurityException {
        super(createSSLContext(keyStore, keyStorePassword), ALLOW_ALL_HOSTNAME_VERIFIER);
    }


    private static SSLContext createSSLContext(InputStream keyStore, String keyStorePassword) throws GeneralSecurityException {
        SSLContext sslcontext = null;
        try {
            sslcontext = SSLContext.getInstance("TLS");
            sslcontext.init(null, new TrustManager[] { new SsX509TrustManager(keyStore, keyStorePassword) }, null);
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException("Failure initializing default SSL context", e);
        } catch (KeyManagementException e) {
            throw new IllegalStateException("Failure initializing default SSL context", e);
        }

        return sslcontext;
}


Solo che mandando in esecuzione il server in pratica non riconosce il certificato del client. Come ulteriore test ho disabilitato in tomcat l'autenticazione del client e infatti tutto funziona. Non capisco se il problema sta nel keystore del server o del client o in qualche configurazione.

Qualche santo può aiutarmi?

Post unito: 03 Febbraio 2015, 16:37:48 CET
Ho risolto (finalmente).. ho modificato la classe SslSocketFactory mettendo:

Codice (Java): [Seleziona]
KeyStore key =null;
            key = KeyStore.getInstance("BKS");

            key.load(keyStore, keyStorePassword.toCharArray());

            KeyManagerFactory kmf = KeyManagerFactory
                    .getInstance(KeyManagerFactory.getDefaultAlgorithm());
            kmf.init(key, keyStorePassword.toCharArray());

            sslcontext = SSLContext.getInstance("TLS");

            sslcontext.init(kmf.getKeyManagers(), new TrustManager[] { new SsX509TrustManager(mTkeyStore, keyStorePassword) }, null);


« Ultima modifica: 03 Febbraio 2015, 16:37:48 CET da felasandroid, Reason: Merged DoublePost »