2017-05-17 1 views
1

Ich habe JAVA_HOME=C:\Users\myuser\jdk1.8.0_65Nicht in der Lage Zertifikat zu importieren in cacert

JRE Sytem Bibliothek in Eclipse Punkte C:\Users\myuser\jdk1.8.0_65

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

Zertifikat importieren von:

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

Keytool Liste gibt:

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

Your keystore contains 0 entries 

Wenn ich versuche, das Zertifikat mit unten-Programm überprüfen kann ich Sehen Sie den Eintrag, warum keytool -list mir nicht das gleiche Ergebnis gibt? Wie kann ich ein Zertifikat hinzufügen? Was ich vermisse?

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(); 
     } 
} 
} 
} 

Antwort

0

Wahrscheinlich versuchen Sie Schlüsselspeicher -Liste auf einem anderen Schlüsselspeicher

versuchen

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

EDITED

SSL Eigenschaften sind auf der JVM-Ebene über die Systemeigenschaften zu laufen. Das heißt, Sie können sie entweder beim Ausführen des Programms (java -D ....) setzen oder Sie können sie in Code setzen, indem Sie System.setProperty ausführen.

Die spezifischen Schlüssel Sie haben, sind unten zu setzen:

javax.net.ssl.keyStore- Speicherort der Datei Java-Schlüssel eines Anwendungsprozesses eigene Zertifikat und einen privaten Schlüssel enthält. Unter Windows muss der angegebene Pfadname Schrägstriche/anstelle von Backslashes verwenden.

javax.net.ssl.keyStorePassword - Kennwort für den Zugriff auf den privaten Schlüssel aus der Keystore-Datei, die von javax.net.ssl.keyStore angegeben wird. Dieses Passwort wird zweimal verwendet: Zum Entsperren der Keystore-Datei (Speicherkennwort), und zum Entschlüsseln des im Schlüsselspeicher gespeicherten privaten Schlüssels (Schlüsselkennwort).

javax.net.ssl.trustStore - Lage der Java-Schlüsselspeicherdatei die Sammlung von CA-Zertifikaten vertraut dieses Bewerbungsverfahren (Trust Store) enthält. Unter Windows muss der angegebene Pfadname anstelle von Backslashes Schrägstriche/verwenden.

Wenn ein Trust Store-Standort nicht angegeben wird die Verwendung dieser Eigenschaft, die SunJSSE Implementierung sucht und verwendet eine Schlüsselspeicherdatei in den folgenden Standorten (in Reihenfolge):

$ JAVA_HOME/lib/security/jssecacerts $ JAVA_HOME/lib/Sicherheit/Cacerts javax.net.ssl.trustStorePassword - Kennwort zum Entsperren des Keystores Datei (Speicherkennwort), die von javax.net.ssl.trustStore angegeben wird.

javax.net.ssl.trustStoreType - (Optional) Für das Format der Java-Keystore-Datei hat diese Eigenschaft den Wert jks (oder JKS). Normalerweise geben Sie diese Eigenschaft nicht an, da der Standardwert bereits jks ist.

javax.net.debug - Um die Protokollierung für die SSL/TLS-Schicht zu aktivieren, legen Sie diese -Eigenschaft auf ssl fest.

siehe java SSL and cert keystore

+0

Dank Noch ich das Zertifikat Verkettungs Fehler. Wie kann ich sicherstellen, dass der Schlüsselspeicher C: \ Users \ myuser \ jdk1.8.0_65 \ jre \ lib \ security \ cacerts referenziert wird, wenn ich mein Java-Programm –

+0

ausführe, habe ich meine Antwort bearbeitet, um Ihre Frage zu beantworten –

Verwandte Themen