web-dev-qa-db-fra.com

Existe-t-il un paramètre Java permettant de désactiver la validation du certificat?

J'ai reçu cette erreur en essayant de démarrer une application: 

Sun.security.validator.ValidatorException: PKIX path validation failed: 
Java.security.cert.CertPathValidatorException:  Java.net.UnknownHostException:oscp.thawte.com

L'application est derrière un réseau fermé et ne pourra jamais accéder à oscp.thawte.com. Existe-t-il un paramètre Java qui peut le désactiver?

40
Tim

-Dcom.Sun.net.ssl.checkRevocation=false

43
MK.

Ce n'est pas exactement un paramètre, mais vous pouvez remplacer les valeurs par défaut TrustManager et HostnameVerifier pour tout accepter. Ce n’est pas une approche sûre, mais dans votre cas, cela peut être acceptable.

Exemple complet: Correction d'un problème de certificat sous HTTPS

12
RealHowTo

Utilisez l'utilitaire cli keytool de la distribution de logiciels Java pour importer (et trust!) Les certificats nécessaires

Échantillon: 

  1. De cli, changez dir en jre\bin

  2. Vérifier le magasin de clés (fichier situé dans le répertoire jre\bin)
    keytool -list -keystore ..\lib\security\cacerts
    Entrez le mot de passe du magasin de clés: changeit 

  3. Téléchargez et enregistrez toutes les chaînes de certificats à partir du serveur requis.

  4. Ajouter des certificats (avant qu'il soit nécessaire de supprimer l'attribut "lecture seule" du fichier "..\lib\security\cacerts") Keytool -alias REPLACE_TO_ANY_UNIQ_NAME -import -keystore ..\lib\security\cacerts -file "r:\root.crt "

accidentellement, j'ai trouvé un conseil aussi simple. D'autres solutions nécessitent l'utilisation de InstallCert.Java et JDK

source: http://www.Java-samples.com/showtutorial.php?tutorialid=210

La réponse donnée par MK fonctionne très bien :)

Dans le service Web Axis et si vous devez désactiver la vérification des certificats, utilisez le code ci-dessous:

AxisProperties.setProperty("axis.socketSecureFactory","org.Apache.axis.components.net.SunFakeTrustSocketFactory");
1

Sur mon Mac, je suis sûr que je ne vais pas autoriser Java ailleurs que sur un site spécifique, j'ai pu utiliser Préférences-> Java pour afficher le panneau de configuration Java et désactiver la vérification. Si DLink corrige un jour son certificat, je le réactiverai.

 Java control panel - Advanced

1
Steve Heffern

En plus des réponses ci-dessus. Vous pouvez le faire par programme en implémentant TrustManager:

TrustManager[] trustAllCerts = new TrustManager[] {
        new X509TrustManager() {
          public Java.security.cert.X509Certificate[] getAcceptedIssuers() {
           return null;
          }
          @Override
          public void checkClientTrusted(X509Certificate[] arg0, String arg1)
           throws CertificateException {}

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

  SSLContext sc=null;
  try {
   sc = SSLContext.getInstance("SSL");
  } catch (NoSuchAlgorithmException e) {
   e.printStackTrace();
  }
  try {
   sc.init(null, trustAllCerts, new Java.security.SecureRandom());
  } catch (KeyManagementException e) {
   e.printStackTrace();
  }
  HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
  // Create all-trusting Host name verifier
  HostnameVerifier validHosts = new HostnameVerifier() {
  @Override
  public boolean verify(String arg0, SSLSession arg1) {
   return true;
  }
  };
  // All hosts will be valid
  HttpsURLConnection.setDefaultHostnameVerifier(validHosts);

Cependant, ce n'est pas une bonne pratique pour la production.

Consultez cet exemple sur Comment désactiver la validation de certificat SSL en Java

0
Mehdi