7
votes

Client SSL sur Android

Je suis en train d'écrire un rôle client pour Android (2.2) et un serveur utilisant SSL. J'ai réussi à échanger des messages entre le serveur et un client normal, mais Android ne semble pas être trop heureux des certificats auto-signés. J'ai cherché Stackoverflow et googlé beaucoup et beaucoup de personnes ont des problèmes similaires. Toutes les réponses que j'ai trouvées jusqu'à présent ne fonctionnaient pas ou n'avaient aucun sens. La plupart des échantillons de code sont pour HTTPS, mais je ne peux pas utiliser, car je dois communiquer via une prise (SSLSocket est ma meilleure hypothèse). J'ai essayé beaucoup de code différent, mais je suis tout à fait de retour à zéro à zéro.

Jusqu'à présent, j'ai compris que je dois créer un certificat (pensez-vous que j'ai bien compris) et un TrustManager personnalisé. Évidemment, je n'ai pas pu trouver de code de travail, c'est pourquoi je demande ici, car il y a généralement des personnes vraiment utiles.

Je recherche une description détaillée de ce qui est censé être fait, et un code, qui peut être transformé en code client de travail Android.

Merci d'avance


0 commentaires

4 Réponses :


1
votes

Je l'ai fait avec le navigateur Android Native portant. Je viens de changer comment le contexte SSL est créé. J'ai promis que je mettrai également un exemple de travail sur Sandrob Site, mais ... :)

https://market.android.com/details?id=org.sandrob < / a>

http://code.google.com/ P / Sandrob / Source / Parcourir / Divers / Exemples / httpsconnection.java


1 commentaires

Merci pour votre réponse. J'ai regardé le code que vous avez lié, et cela a l'air intéressant. Le problème est qu'il utilise beaucoup de classes, ce qui semble être fait sur mesure. J'ai regardé certains d'entre eux sur Google et j'ai constaté qu'ils ont été mis en œuvre dans d'autres bibliothèques. Permet de prendre la certificatechainvalidator semble être censé être dans le paquet Android.net.http - mais ce n'est pas là. Existe-t-il un exemple de travail complet simplifié, utilisant des bibliothèques standard?



1
votes

CertificatechainValidator fait partie des sources Android. Au moins en version / tag 2.2.1_R1

Pour le faire fonctionner, vous pouvez construire un navigateur de sources Android et changer à quoi SSLContext est initialisé dans le fichier httpsconnection.java.

Vous avez besoin de KeyManagers (initialisée avec cerfile / mot de passe) et de fiducies de confiance (Trust All).

SSLContext.EngineInit (KeyManagers, TrustManagers, NULL, CACHE, NULL);


1 commentaires

Salut. Je n'arrive pas à l'importer, et selon développeur. android.com/reference/andrroid/net/http/... La fonction ne semble pas exister. Autant que je sache, je devrai créer des gestionnaires de douane pour gérer les certificats, mais je ne trouve pas encore du code de travail. J'utilise Android 2.2 (API 8) au fait.



0
votes

https://market.android.com/details?id=org. Sandrob.Sslexample

N'hésitez pas à changer de sources comme vous en avez besoin.


0 commentaires

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

0 commentaires