Jenkins – Repository Git et certificat auto-signé

Lorsque l’on veut connecter Jenkins à un serveur de repository git ou SVN ayant un certificat auto-signé (connexion en https),l’erreur suivante peut survenir :

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Il s’agit d’une erreur Java du fait que Jenkins atteint l’URL avant de faire appel à Git.
Ainsi, même si sur Git, vous avez ajoutez en configuration globale, la désactivation du paramètre http.sslverify , cette erreur Java surviendra.

Si besoin est, il est possible de vérifier le type de certificat d’un serveur web ou sa validité avec la commande :

openssl s_client -connect name.company.com:443

Selon la manière dont Jenkins a été installé sur votre serveur, il semble qu’il y ait deux manières de résoudre ce problème.

 

1er cas – avec un pluggin Jenkins

En utilisant le plugin : Skip Certificate Check plugin

https://wiki.jenkins-ci.org/display/JENKINS/Skip+Certificate+Check+plugin
Il n’y a aucune configuration à faire.

 

2e cas – avec l’intégration du certificat dans JVM

Export d’un certificat

On exporte le certificat du serveur distant en question et on le met sur le serveur Jenkins :
– Pour un site web, se rendre dessus via navigateur sur https://name.company.com par exemple
– Cliquer sur le cadenas présent près de l’URL et faire « View Certificate » puis, « Export… »
– Choisir le format : X.509 certificate (PEM)
– On place ensuite ce fichier sur le serveur Jenkins

 

Commandes pour lister et importer un certificat

Sur le serveur Jenkins, les CA sont stockés dans un fichier nommé « cacert » protégé par mot de passe. Le password par défaut selon les versions de Java : changeit OU changeme

Ce fichier peut se trouver à différents endroits selon la manière dont a été installé Java ou Jenkins. Avec le commande suivante, vous affinerez votre recherche :
locate cacerts

Pour ma part, ce fichier était ici :

/etc/ssl/certs/java/cacerts

 

Lister les certificats/CA :

keytool -list -keystore /etc/ssl/certs/java/cacerts -v

 

Importer un certificat (exemple avec le certificat name.company.com.pem)

keytool -import -keystore /etc/ssl/certs/java/cacerts -file name.company.com.pem

Voici l’ouput attendu :

Entrez le mot de passe du fichier de clés :
 Propriétaire : EMAILADDRESS=admin@company.com, CN=name.company.com, OU=ADM, O=Company, L=Paris, ST=FR, C=FR
 Emetteur : CN=Company-CA, DC=Company, DC=com
 Numéro de série : 49528850000000000391
 Valide du : Thu Jul 09 11:32:57 CEST 2014 au : Sat Jul 08 11:32:57 CEST 2015
[...]
 Faire confiance à ce certificat ? [non] :  oui
 Certificat ajouté au fichier de clés

Pas besoin de redémarrage ni de Java ni de Jenkins, le nouveau certificat est censé être immédiatement reconnu et les problèmes d’authentifications, disparus.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *