web-dev-qa-db-fra.com

Comment importer correctement un certificat auto-signé dans le magasin de clés Java disponible pour toutes les applications Java par défaut?

Je souhaite importer un certificat auto-signé dans Java afin que toute application Java qui tente d'établir une connexion SSL approuve ce certificat.

Jusqu'à présent, j'ai réussi à l'importer

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

Pourtant, quand j'essaye de courir HTTPSClient.class je reçois toujours:

javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException: la construction du chemin PKIX a échoué: Sun.security.provider.certpath.SunCertPathBuilderException: impossible de trouver un chemin de certification valide pour la cible demandée
130
sorin

Sous Windows , le moyen le plus simple consiste à utiliser le programme portecle .

  1. Téléchargez et installez portecle.
  2. D'abord, assurez-vous à 100% que vous savez quel JRE ou JDK est utilisé pour exécuter votre programme. Sur un Windows 7 64 bits, il pourrait y avoir plusieurs JRE. Process Explorer peut vous aider ou vous pouvez utiliser: System.out.println(System.getProperty("Java.home"));
  3. Copiez le fichier Java_HOME\lib\security\cacerts dans un autre dossier.
  4. Dans Portecle, cliquez sur Fichier> Ouvrir un fichier de magasin de clés.
  5. Sélectionnez le fichier cacerts
  6. Entrez ce mot de passe: changeit
  7. Cliquez sur Outils> Importer un certificat de confiance.
  8. Recherchez le fichier mycertificate.pem
  9. Cliquez sur Importer
  10. Cliquez sur OK pour l'avertissement concernant le chemin de confiance.
  11. Cliquez sur OK lorsqu'il affiche les détails du certificat.
  12. Cliquez sur Oui pour accepter le certificat comme approuvé.
  13. Lorsqu'il demande un alias, cliquez sur OK, puis à nouveau sur OK lorsqu'il indique que le certificat a été importé.
  14. Cliquez sur Enregistrer. N'oubliez pas ceci ou le changement est annulé.
  15. Copiez le fichier cacerts là où vous l'avez trouvé.

Sous Linux:

Vous pouvez télécharger le certificat SSL à partir d'un serveur Web qui l'utilise déjà comme ceci:

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

Vérifiez éventuellement les informations du certificat:

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

Importez le certificat dans le magasin de clés Java cacerts:

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

Modifier:

De nos jours, il n'est pas souvent nécessaire d'ajouter un certificat au magasin de clés car vous pouvez obtenir un certificat à 5 $ par an auprès de ssls.com . Juste au cas où ce serait une option pour vous.

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

J'ai fini par écrire un petit script qui ajoute les certificats aux magasins de clés, ce qui rend son utilisation beaucoup plus simple.

Vous pouvez obtenir la dernière version de 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

Cela a fonctionné pour moi. :)

 Sudo keytool -importcert -file nom_fichier.cer -alias nomaliasalias -keystore $ ACCUEIL Java/jre/lib/security/cacerts -storepass changeit 
13
Walk

Si vous utilisez un certificat signé par une autorité de certification qui n'est pas inclus par défaut dans le fichier Java cacerts, vous devez effectuer la configuration suivante pour les connexions HTTPS. Pour importer des certificats dans des cacerts:

  1. Ouvrez Windows Explorer et accédez au fichier cacerts, situé dans le sous-dossier jre\lib\security où est installé AX Core Client. L'emplacement par défaut est C:\Program Files\Logiciel ACL\AX Core Client\jre\lib\security.
  2. Créez une copie de sauvegarde du fichier avant d’apporter des modifications.
  3. Selon les certificats que vous recevez de l'autorité de certification que vous utilisez, vous devrez peut-être importer un certificat intermédiaire et/ou un certificat racine dans le fichier cacerts. Utilisez la syntaxe suivante pour importer des certificats: keytool -import -alias -keystore -trustcacerts -file
  4. Si vous importez les deux certificats, l'alias spécifié pour chaque certificat doit être unique.
  5. Tapez le mot de passe pour le fichier de clés à l'invite "Mot de passe" et appuyez sur Entrée. Le mot de passe par défaut Java du fichier cacerts est "changeit". Tapez "y" à l'invite "Faire confiance à ce certificat?" Et appuyez sur Entrée.
4
Bharat Darakh

La commande simple 'keytool' fonctionne également sous Windows et/ou avec Cygwin.

SI vous utilisez Cygwin voici la commande modifiée que j'ai utilisée depuis le bas de la réponse "S.Botha":

  1. assurez-vous d'identifier le JRE à l'intérieur du JDK que vous utiliserez
  2. Commencez votre invite/cygwin en tant qu'administrateur
  3. allez dans le répertoire bin de ce JDK, par exemple cd/cygdrive/c/Programme\Fichiers/Java/jdk1.8.0_121/jre/bin
  4. Exécutez la commande keytool de l'intérieur, en indiquant le chemin d'accès à votre nouveau certificat à la fin, comme suit:

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

Remarquez, car si cela est sous Cygwin, vous donnez un chemin à un programme non-Cygwin, le chemin est donc semblable à DOS et entre guillemets.

1
Jordan Gee

Pourrait vouloir essayer

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

honnêtement, je ne sais pas du tout où se trouve votre certificat si vous écrivez simplement cacerts donnez-lui simplement un chemin complet

0
Gradient

installer le certificat dans Java linux

/ opt/jdk (version)/bin/keytool -import -alias alias nom -fichier certificat.cer -keystore cacerts -storepass mot de passe

0
Apuri Srikanth