Maison >Java >javaDidacticiel >Comment gérer les certificats SSL invalides dans Apache HttpClient sans KeyManager et TrustManager ?

Comment gérer les certificats SSL invalides dans Apache HttpClient sans KeyManager et TrustManager ?

DDD
DDDoriginal
2024-11-04 19:58:02177parcourir

How to Handle Invalid SSL Certificates in Apache HttpClient Without KeyManager and TrustManager?

Gestion des certificats SSL non valides avec Apache HttpClient

Question :

Lors de l'utilisation d'Apache HttpClient pour établissez une connexion HTTPS, des erreurs liées à des certificats SSL invalides sont rencontrées. Comment puis-je surmonter ces erreurs tout en évitant l'utilisation de KeyManager et TrustManager ?

Réponse :

La gestion des certificats SSL non valides dans Apache HttpClient nécessite l'une des approches suivantes :

  • Configuration de SSLContext avec un TrustManager qui accepte n'importe quel certificat
  • Configuration de SSLContext avec un magasin de confiance approprié contenant le certificat requis
  • Ajout du certificat au magasin de confiance Java par défaut

Implémentation d'un TrustManager pour n'importe quel certificat :

Le code suivant montre comment créer un SSLContext avec un TrustManager qui accepte n'importe quel certificat :

<code class="java">import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class SSLTest {
    
    public static void main(String [] args) throws Exception {
        // configure the SSLContext with a TrustManager
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
        SSLContext.setDefault(ctx);

        URL url = new URL("https://mms.nw.ru");
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return true;
            }
        });
        System.out.println(conn.getResponseCode());
        conn.disconnect();
    }
    
    private static class DefaultTrustManager implements X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
}</code>

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