Publié le 07/03/2017, rédigé par
Davy CLAISSE
Java & SSL
Comment ajouter un certificat SSL à une JVM ?
Problème
- Vous diposez d'un certificat SSL (normal ou auto-signé).
- Vous utilisez ce certificat sur un serveur (par exemple sur le Nexus de votre entreprise).
- Une application Java doit se connecter à ce serveur mais reçoit systématiquement une erreur PKIX (par exemple Maven qui tente de récupérer une lib depuis Nexus mais qui ne reconnait pas le certificat comme certificat de confiance).
Solution
Ajouter ce certificat directement au keystore de la JVM de sorte que ce soit celle-ci qui le valide pour chaque application Java qu'elle exécute.
Comment faire ?
- Extraire le certificat SSL depuis votre navigateur (IE, Firefox, Chrome) de préférence au format DER, sinon il faut le faire au format X509.
- Si votre certificat est au format X509 vous devez le convertir au format DER avec la commande suivante :
openssl x509 -in CHEMIN_VERS_MON_CERTIFICAT_X509.crt -inform pem -out CHEMIN_VER_MON_CERTIFICAT_CONVERTI.der -outform der
- Valider la conformité du format DER par la JVM
# N.B : $JAVA_HOME correspond au répertoire où est décompressé le JDK. # Si votre JVM est déjà dans le path, vous pouvez directement # invoquer la commande "keytool". $JAVA_HOME/jre/bin/keytool -v -printcert -file CHEMIN_VER_MON_CERTIFICAT_CONVERTI.der
- Ajouter le certificat au fichier cacerts de la JVM (pensez à backuper ce fichier avant tout opération)
# Attention vous devez spécifier un chemin complet pour le paramètre '-keystore'. $JAVA_HOME/jre/bin/keytool -importcert -alias L_ALIAS_DE_MON_CERTIFICAT -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file CHEMIN_VER_MON_CERTIFICAT_CONVERTI.der
Normalement votre certificat a été ajouté à la condition que l'alias ne soit pas déjà utilisé, auquel cas il faudra soit supprimer l'alias et le certificat qui lui est associé, soit choisir un autre alias.