Maison >Java >javaDidacticiel >Comment contourner les certificats de serveur non approuvés lors de l'établissement de connexions HTTPS sur Android ?

Comment contourner les certificats de serveur non approuvés lors de l'établissement de connexions HTTPS sur Android ?

DDD
DDDoriginal
2024-12-10 16:25:12905parcourir

How to Bypass Untrusted Server Certificates When Establishing HTTPS Connections on Android?

Établissement d'une connexion HTTPS sur Android

Lorsqu'ils tentent d'établir une connexion HTTPS sur Android, les développeurs peuvent rencontrer une exception liée à un certificat de serveur non approuvé . Pour résoudre ce problème, on peut envisager d'accepter le certificat du serveur.

Faire confiance à tous les hôtes

Une approche pour contourner la vérification du certificat consiste à faire confiance à tous les hôtes, ce qui désactive efficacement la vérification. Ceci peut être réalisé en implémentant un HostnameVerifier personnalisé et un TrustManager.

// Hostname verifier that always returns true
HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

// Trust manager that accepts all certificates
TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[]{};
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
    }
};

Ensuite, initialisez SSLContext et appliquez le gestionnaire de confiance et le vérificateur de nom d'hôte.

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

Exemple d'utilisation

Lors de la création d'une connexion HTTP, vérifiez le protocole et appliquez la configuration susmentionnée si c'est le cas. HTTPS.

HttpURLConnection http = null;
String url = "https://example.com";

if (url.toLowerCase().equals("https")) {
    trustAllHosts();
    HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
    https.setHostnameVerifier(DO_NOT_VERIFY);
    http = https;
} else {
    http = (HttpURLConnection) url.openConnection();
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn