3 Mettre à jour les certificats du keystore Jenkins
wpetit edited this page 2021-02-22 15:53:44 +01:00

Mettre à jour les certificats du keystore Jenkins

D'autres erreurs liées aux certificats LetsEncrypt peuvent intervenir à différents niveaux. Un autre endroit à vérifier en priorité est l'environnement de build de Tamarin

Dans un pipeline, si des erreurs de ce type apparaissent:

Attempting to resolve master from remote references...
 > git --version # timeout=10
 > git --version # 'git version 2.18.4'
using GIT_ASKPASS to set credentials Identifiants Jenkins Forge
 > git ls-remote -h -- https://forge.cadoles.com/Cadoles/Jenkins.git # timeout=10
ERROR: Checkout failed
hudson.plugins.git.GitException: Command "git ls-remote -h -- https://forge.cadoles.com/Cadoles/Jenkins.git" returned status code 128:
stdout: 
stderr: fatal: unable to access 'https://forge.cadoles.com/Cadoles/Jenkins.git/': SSL certificate problem: certificate has expired

	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2450)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:2051)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1951)
[...]

Il est fort probable que le keystore java n'ait pas le certificat de la forge à jour (ce qui est probable avec LetsEncrypt).

Dans ce cas:

  1. Se connecter sur la machine Jenkins en SSH avec le compte root

  2. Si le script /root/install-java-cert.sh n'existe pas encore, le créer avec le contenu suivant:

    #!/bin/sh
    
    set -xe
    
    DOMAIN=$1
    JENKINS_HOME=/var/lib/jenkins
    JAVA_HOME=/usr/lib/jvm/default-jvm
    
    if [ -z "$DOMAIN" ]; then
      echo "You must specify the domain as first argument"
      exit 1
    fi
    
    # Import certificate
    openssl s_client -showcerts -connect "$DOMAIN" < /dev/null 2> /dev/null | openssl x509 -outform PEM > ~/root_ca.pem
    
    # Duplicate Java Keystore file and move into Jenkins...
    mkdir -p $JENKINS_HOME/keystore/
    cp $JAVA_HOME/jre/lib/security/cacerts $JENKINS_HOME/keystore/
    
    # Add Certificate to Keystore
    keytool -import -alias $DOMAIN -keystore $JENKINS_HOME/keystore/cacerts -file ~/root_ca.pem
    
    # Add -Djavax.net.ssl.trustStore=$JENKINS_HOME/keystore/cacerts to the
    # Jenkins startup parameters. For Debian/Ubuntu, this is /etc/default/jenkins
    mkdir -p /etc/default
    echo 'JAVA_ARGS="$JAVA_ARGS -Djavax.net.ssl.trustStore=$JENKINS_HOME/keystore/cacerts"' >> /etc/default/jenkins
    
    rc-service jenkins restart
    
  3. Lancer le script /root/install-java-cert.sh forge.cadoles.com:443. Le mot de passe par défaut du keystore est changeit.