2017-05-17 1 views
1

Je JAVA_HOME=C:\Users\myuser\jdk1.8.0_65Pas en mesure d'importer le certificat dans cacert

JRE Sytem Bibliothèque en points Eclipse à C:\Users\myuser\jdk1.8.0_65

java -version donne C:\Users\myuser\jdk1.8.0_65

Importation certificat par:

C: \ Users \ monutilisateur \ jdk1.8.0_65 \ bin \ keytool.exe -importcert -trustcacerts -keystore C: \ Utilisateurs \ monutilisateur \ jdk1.8.0_65 \ jre \ lib \ security \ cacerts -stor epass changeit -noprompt -alias ldap -file C: \ Users \ myuser \ certificats \ ldap_cer.cer

liste Keytool donne:

C:\Users\myuser>keytool -list 
Enter keystore password: 
Keystore type: JKS 
Keystore provider: SUN 

Your keystore contains 0 entries 

Lorsque je tente de vérifier le certificat avec ci-dessous le programme que je peux voyez l'entrée, pourquoi keytool -list ne me donne pas le même résultat? Comment puis-je ajouter un certificat? Qu'est-ce qui me manque?

package com.; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.security.KeyStore; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 
import java.security.cert.Certificate; 
import java.util.Enumeration; 
public class HandShake { 
static FileInputStream is; 
public static void main(String[] args) { 
try { 

    File file = new File("C://Users//myuser//jdk1.8.0_65//jre//lib//security//cacerts"); 
    System.setProperty("javax.net.ssl.keyStore", file.getAbsolutePath()); 
    System.out.println(System.getProperty("javax.net.ssl.keyStore" 
      )); 
    is= new FileInputStream(file); 
    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
    String password = "changeit"; 
    keystore.load(is, password.toCharArray()); 
    Enumeration enumeration = keystore.aliases(); 
    while(enumeration.hasMoreElements()) { 
     String alias = (String)enumeration.nextElement(); 
     if(alias.equals("ldap")){ 

     System.out.println("alias name: " + alias); 
     Certificate certificate = keystore.getCertificate(alias); 
     System.out.println(certificate.toString()); 
     } 
    } 

} catch (java.security.cert.CertificateException e4) { 
    e4.printStackTrace(); 
} catch (NoSuchAlgorithmException e1) { 
    e1.printStackTrace(); 
} catch (FileNotFoundException e2) { 
    e2.printStackTrace(); 
} catch (KeyStoreException e3) { 
    e3.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
}finally { 
    if(null != is) 
     try { 
      is.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
} 
} 
} 

Répondre

0

Probablement vous essayez d'exécuter -list keystore sur un autre keystore

essayer

keytool -list -keystore C:\Users\myuser\jdk1.8.0_65\jre\lib\security\cacerts 

ÉDITÉE

propriétés SSL sont définies au niveau JVM via les propriétés du système. Ce qui signifie que vous pouvez les définir lorsque vous exécutez le programme (java -D ....) Ou vous pouvez les définir dans le code en faisant System.setProperty.

Les touches spécifiques, vous devez définir sont ci-dessous:

javax.net.ssl.keyStore- Emplacement du fichier Java keystore contenant propre certificat d'un processus d'application et la clé privée. Sous Windows, le chemin d'accès spécifié doit utiliser des barres obliques /, à la place de barres obliques inverses. Javax.net.ssl.keyStorePassword - Mot de passe pour accéder à la clé privée à partir du fichier de magasin de clés spécifié par javax.net.ssl.keyStore. Ce mot de passe est utilisé deux fois: Pour déverrouiller le fichier keystore (mot de passe du magasin), et Pour déchiffrer la clé privée stockée dans le magasin de clés (mot de passe de la clé).

javax.net.ssl.trustStore - Emplacement du fichier Java keystore contenant la collection de certificats CA approuvés par ce processus de demande (magasin de confiance). Sous Windows, le chemin spécifié doit utiliser des barres obliques /, à la place des barres obliques inverses.

Si un emplacement de magasin de confiance n'est pas spécifié en utilisant cette propriété, la mise en œuvre SunJSSE recherches pour et utilise un fichier keystore dans les endroits suivants (dans l'ordre):

$ JAVA_HOME/lib/security/jssecacerts $ JAVA_HOME/lib/security/cacerts javax.net.ssl.trustStorePassword - Mot de passe pour déverrouiller le fichier keystore (mot de passe du magasin) spécifié par javax.net.ssl.trustStore. Javax.net.ssl.trustStoreType - (Facultatif) Pour le fichier de keystore Java au format , cette propriété a la valeur jks (ou JKS). Normalement, vous ne spécifiez pas cette propriété, car sa valeur par défaut est déjà jks.

javax.net.debug - Pour activer la journalisation de la couche SSL/TLS, définissez cette propriété sur ssl.

voir java SSL and cert keystore

+0

Merci encore je reçois l'erreur enchaînant certificat. Comment puis-je m'assurer que le keystore C: \ Users \ monutilisateur \ jdk1.8.0_65 \ jre \ lib \ security \ cacerts est renvoyé lorsque j'exécute mon programme Java –

+0

J'ai modifié ma réponse pour répondre à votre question –