wake-up-neo.net

Wie importiere ich ein selbstsigniertes Zertifikat in den Java Keystore, der standardmäßig für alle Java Anwendungen verfügbar ist?

Ich möchte ein selbstsigniertes Zertifikat in Java importieren, damit jede Java) - Anwendung, die versucht, eine SSL-Verbindung herzustellen, diesem Zertifikat vertraut.

Bisher konnte ich es importieren

keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem

Trotzdem, wenn ich versuche zu rennen HTTPSClient.class Ich bekomme immer noch:

javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException: PKIX-Pfadaufbau fehlgeschlagen: Sun.security.provider.certpath.SunCertPathBuilderException: Es wurde kein gültiger Zertifizierungspfad für das angeforderte Ziel gefunden
130
sorin

Unter Windows ist es am einfachsten, das Programm portecle zu verwenden.

  1. Portecle herunterladen und installieren.
  2. Stellen Sie zunächst 100% ig sicher, dass Sie wissen, mit welcher JRE oder welchem ​​JDK Ihr Programm ausgeführt wird. Auf einem 64-Bit-Windows 7 könnten einige JREs vorhanden sein. Process Explorer kann Ihnen dabei helfen oder Sie können Folgendes verwenden: System.out.println(System.getProperty("Java.home"));
  3. Kopieren Sie die Datei Java_HOME\lib\security\cacerts in einen anderen Ordner.
  4. Klicken Sie in Portecle auf Datei> Keystore-Datei öffnen
  5. Wählen Sie die Cacerts-Datei
  6. Geben Sie dieses Passwort ein: changeit
  7. Klicken Sie auf Extras> Vertrauenswürdiges Zertifikat importieren
  8. Suchen Sie nach der Datei mycertificate.pem
  9. Klicken Sie auf Importieren
  10. Klicken Sie auf OK, um eine Warnung zum Vertrauenspfad anzuzeigen.
  11. Klicken Sie auf OK, wenn die Details zum Zertifikat angezeigt werden.
  12. Klicken Sie auf Ja, um das Zertifikat als vertrauenswürdig zu akzeptieren.
  13. Wenn Sie nach einem Alias ​​gefragt werden, klicken Sie auf OK und erneut auf OK, wenn Sie wissen, dass das Zertifikat importiert wurde.
  14. Klicken Sie auf Speichern. Vergessen Sie dies nicht oder die Änderung wird verworfen.
  15. Kopieren Sie die Datei cacerts wieder an die Stelle, an der Sie sie gefunden haben.

Unter Linux:

Sie können das SSL-Zertifikat wie folgt von einem Webserver herunterladen, der es bereits verwendet:

$ echo -n | openssl s_client -connect www.example.com:443 | \
   sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt

Überprüfen Sie optional die Zertifikatinformationen:

$ openssl x509 -in /tmp/examplecert.crt -text

Importieren Sie das Zertifikat in den Java cacerts-Keystore:

$ keytool -import -trustcacerts -keystore /opt/Java/jre/lib/security/cacerts \
   -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt

Bearbeiten:

Heutzutage müssen wir dem Keystore nicht mehr oft ein Zertifikat hinzufügen, da Sie von ssls.com ein Zertifikat für 5 USD pro Jahr erhalten können. Nur für den Fall, dass das eine Option für Sie ist.

210
Sarel Botha
    D:\Java\jdk1.5.0_10\bin\keytool -import -file "D:\Certificates\SDS services\Dev\dev-sdsservices-was8.infavig.com.cer" -keystore "D:\Java\jdk1.5.0_10\jre\lib\security\cacerts" -alias "sds certificate"
33
Vikky

Am Ende habe ich ein kleines Skript geschrieben, das die Zertifikate zu den Keystores hinzufügt, sodass die Verwendung wesentlich einfacher ist.

Die neueste Version erhalten Sie von https://github.com/ssbarnea/keytool-trust

#!/bin/bash
# version 1.0
# https://github.com/ssbarnea/keytool-trust
REMHOST=$1
REMPORT=${2:-443}

KEYSTORE_PASS=changeit
KEYTOOL="Sudo keytool"

# /etc/Java-6-Sun/security/cacerts

for CACERTS in  /usr/lib/jvm/Java-8-Oracle/jre/lib/security/cacerts \
    /usr/lib/jvm/Java-7-Oracle/jre/lib/security/cacerts \
    "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts" \
    "/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/Java/lib/security/cacerts"
do

if [ -e "$CACERTS" ]
then
    echo --- Adding certs to $CACERTS

# FYI: the default keystore is located in ~/.keystore

if [ -z "$REMHOST" ]
    then
    echo "ERROR: Please specify the server name to import the certificatin from, eventually followed by the port number, if other than 443."
    exit 1
    fi

set -e

rm -f $REMHOST:$REMPORT.pem

if openssl s_client -connect $REMHOST:$REMPORT 1>/tmp/keytool_stdout 2>/tmp/output </dev/null
        then
        :
        else
        cat /tmp/keytool_stdout
        cat /tmp/output
        exit 1
        fi

if sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' </tmp/keytool_stdout > /tmp/$REMHOST:$REMPORT.pem
        then
        :
        else
        echo "ERROR: Unable to extract the certificate from $REMHOST:$REMPORT ($?)"
        cat /tmp/output
        fi

if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT >/dev/null
    then
    echo "Key of $REMHOST already found, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi

if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -keystore "$CACERTS" >/dev/null
    then
    echo "Key of $REMHOST already found in cacerts, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -keystore "$CACERTS" -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi

fi

done

`` `

32
sorin

Das hat bei mir funktioniert. :)

 Sudo keytool -importcert -file filename.cer -alias randomaliasname -keystore $ Java_HOME/jre/lib/security/cacerts -storepass changeit 
13
Walk

Wenn Sie ein von einer Zertifizierungsstelle signiertes Zertifikat verwenden, das nicht standardmäßig in der Java cacerts-Datei enthalten ist, müssen Sie die folgende Konfiguration für HTTPS-Verbindungen vornehmen. Um Zertifikate in cacerts zu importieren:

  1. Öffnen Sie den Windows Explorer und navigieren Sie zu der cacerts-Datei, die sich im Unterordner jre\lib\security befindet, in dem AX Core Client installiert ist. Der Standardspeicherort ist C:\Programme\ACL-Software\AX Core Client\jre\lib\security
  2. Erstellen Sie eine Sicherungskopie der Datei, bevor Sie Änderungen vornehmen.
  3. Abhängig von den Zertifikaten, die Sie von der von Ihnen verwendeten Zertifizierungsstelle erhalten, müssen Sie möglicherweise ein Zwischenzertifikat und/oder ein Stammzertifikat in die cacerts-Datei importieren. Verwenden Sie die folgende Syntax, um Zertifikate zu importieren: keytool -import -alias -keystore -trustcacerts -file
  4. Wenn Sie beide Zertifikate importieren, sollte der für jedes Zertifikat angegebene Alias ​​eindeutig sein.
  5. Geben Sie das Kennwort für den Schlüsselspeicher an der Eingabeaufforderung "Kennwort" ein und drücken Sie die Eingabetaste. Das Standardkennwort Java für die cacerts-Datei lautet "changeit". Geben Sie bei der Eingabeaufforderung "Trust this certificate?" "Y" ein und drücken Sie die Eingabetaste.
4
Bharat Darakh

Der einfache Befehl 'keytool' funktioniert auch unter Windows und/oder mit Cygwin.

WENN Sie Cygwin verwenden hier ist der modifizierte Befehl, den ich unten in "S.Bothas" Antwort verwendet habe:

  1. stellen Sie sicher, dass Sie die JRE im JDK identifizieren, die Sie verwenden werden
  2. Starten Sie Ihre Eingabeaufforderung/cygwin als Administrator
  3. gehen Sie in das bin-Verzeichnis dieses JDK, z. cd/cygdrive/c/Program\Files/Java/jdk1.8.0_121/jre/bin
  4. Führen Sie den Befehl keytool aus, in dem Sie am Ende den Pfad zu Ihrem neuen Zertifikat angeben:

    ./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts  -storepass changeit -noprompt -alias myownaliasformysystem -file "D:\Stuff\saved-certs\ca.cert"
    

Beachten Sie, dass unter Cygwin ein Pfad zu einem Nicht-Cygwin-Programm angegeben wird, der Pfad also DOS-ähnlich und in Anführungszeichen steht.

1
Jordan Gee

Vielleicht möchten Sie es versuchen

keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem

ich habe ehrlich gesagt keine Ahnung, wo es Ihr Zertifikat ablegt, wenn Sie nur cacerts schreiben, geben Sie ihm einfach einen vollständigen Pfad

0
Gradient

installiere das Zertifikat in Java Linux

/ opt/jdk (version)/bin/keytool -import -alias aliasname -datei certificate.cer -keystore cacerts -storepass password

0
Apuri Srikanth