Maison > Java > javaDidacticiel > Comment résoudre les erreurs « Exception SSL : certificat de serveur non approuvé » dans les requêtes Android HTTPS POST ?

Comment résoudre les erreurs « Exception SSL : certificat de serveur non approuvé » dans les requêtes Android HTTPS POST ?

Patricia Arquette
Libérer: 2024-12-14 01:50:09
original
700 Les gens l'ont consulté

How to Resolve

Connexion HTTPS Android

Lors de la tentative de requêtes HTTPS POST dans Android, une erreur « Exception SSL : certificat de serveur non approuvé » est rencontrée. Bien qu'ils fonctionnent correctement sous HTTP, les appels HTTPS échouent.

Solution :

Pour contourner la vérification du certificat du serveur et établir des connexions HTTPS, un gestionnaire de confiance et un vérificateur de nom d'hôte personnalisés peuvent être implémentés. comme suit :

public static void trustAllHosts() {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[]{};
        }

        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
    }};

    // Install the all-trusting trust manager
    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

// always verify the host - dont check for certificate
final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};
Copier après la connexion

Pour utiliser ces paramètres, modifiez votre code de configuration de connexion HTTPS comme suit :

HttpURLConnection http = null;

if (url.getProtocol().toLowerCase().equals("https")) {
    trustAllHosts();
    HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
    https.setHostnameVerifier(DO_NOT_VERIFY);
    http = https;
} else {
    http = (HttpURLConnection) url.openConnection();
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal