= Déploiement automatique de certificat Let's Encrypt vers Java Keystore =

Contexte

Cette documentation détaille le processus d'automatisation du déploiement d'un certificat Let's Encrypt vers un Java Keystore (utilisé par Tomcat ou d'autres applications Java).

Prérequis

* Un certificat Let's Encrypt généré via Certbot * Accès root sur les deux serveurs (source et destination) * OpenSSL et Keytool installés * SSH configuré entre les serveurs

Configuration SSH sans mot de passe

Sur le serveur source (où se trouve le certificat Let's Encrypt) : <syntaxhighlight lang=“bash”> # Générer la paire de clés ssh-keygen -t ed25519

# Copier la clé vers le serveur de destination ssh-copy-id root@serveur-destination </syntaxhighlight>

Script de déploiement

Créer le script suivant dans /usr/local/bin/deploy_cert_mdm.sh : <syntaxhighlight lang=“bash”> #!/bin/bash

# Configuration CERT_PATH=“/etc/letsencrypt/live/mdm.murcier.fun” MDM_SERVER=“mdm.murcier.fun” MDM_USER=“root” KEYSTORE_PASSWORD=“123456” REMOTE_PATH=“/var/lib/tomcat9/ssl”

# Vérification des droits root if [ “$EUID” -ne 0 ]; then

echo "Ce script doit être exécuté en tant que root"
exit 1

fi

# Création d'un dossier temporaire TEMP_DIR=$(mktemp -d) cd “$TEMP_DIR” || exit 1

echo “Création du keystore…”

# Création du keystore PKCS12 openssl pkcs12 -export \

in “$CERT_PATH/fullchain.pem” \

inkey “$CERT_PATH/privkey.pem” \

out mdm.murcier.fun.p12 \

name tomcat \

password pass:$KEYSTORE_PASSWORD

# Conversion en JKS keytool -importkeystore \

srckeystore mdm.murcier.fun.p12 \

srcstoretype PKCS12 \

srcstorepass $KEYSTORE_PASSWORD \

destkeystore mdm.murcier.fun.jks \

deststoretype JKS \

deststorepass $KEYSTORE_PASSWORD

echo “Copie du keystore vers le serveur MDM…”

# Copie et configuration sur le serveur distant scp mdm.murcier.fun.jks $MDM_USER@$MDM_SERVER:$REMOTE_PATH/ ssh $MDM_USER@$MDM_SERVER “chown tomcat:tomcat $REMOTE_PATH/mdm.murcier.fun.jks && chmod 600 $REMOTE_PATH/mdm.murcier.fun.jks && systemctl restart tomcat9”

# Nettoyage cd / rm -rf “$TEMP_DIR”

echo “Déploiement terminé avec succès!” </syntaxhighlight>

Installation du script

<syntaxhighlight lang=“bash”> chmod +x /usr/local/bin/deploy_cert_mdm.sh ln -s /usr/local/bin/deploy_cert_mdm.sh /etc/letsencrypt/renewal-hooks/deploy/deploy_cert_mdm </syntaxhighlight>

Configuration Tomcat

Le fichier server.xml doit contenir : <syntaxhighlight lang=“xml”> <Connector port=“8443” protocol=“org.apache.coyote.http11.Http11NioProtocol”

maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/var/lib/tomcat9/ssl/mdm.murcier.fun.jks"
certificateKeystorePassword="123456"
type="RSA" />
</SSLHostConfig>

</Connector> </syntaxhighlight>

Test manuel

Pour tester le renouvellement manuellement : <syntaxhighlight lang=“bash”> # Test à blanc certbot renew –dry-run

# Renouvellement forcé certbot certonly –force-renewal -d votre.domaine.com </syntaxhighlight>

Vérification

Pour vérifier l'installation : <syntaxhighlight lang=“bash”> # Vérifier le statut de Tomcat systemctl status tomcat9

# Vérifier le certificat curl -v https://votre.domaine.com:8443 </syntaxhighlight>

Maintenance

* Le renouvellement est automatique via Certbot * Le script s'exécute automatiquement après chaque renouvellement * Le certificat est renouvelé environ 30 jours avant expiration * Vérifier les logs dans /var/log/letsencrypt/ en cas de problème

Dépannage

Problèmes courants

* 'Erreur de permissions' : Vérifier les droits utilisateur tomcat * 'Erreur SSH' : Vérifier la configuration SSH et les clés * 'Tomcat ne démarre pas' : Vérifier les logs avec journalctl -u tomcat9 * 'Certificat non renouvelé' : Vérifier les logs Certbot

Commandes utiles

* Vérifier le contenu d'un keystore : <syntaxhighlight lang=“bash”> keytool -list -v -keystore keystore.jks </syntaxhighlight>

* Vérifier la validité du certificat : <syntaxhighlight lang=“bash”> openssl x509 -in fullchain.pem -text -noout </syntaxhighlight>

Sécurité Certificats Java Automatisation