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) :

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

Script de déploiement

Créer le script suivant dans /usr/local/bin/deploy_cert.sh :

#!/bin/bash # Configuration CERT_PATH="/etc/letsencrypt/live/domain.tld" MDM_SERVER="domain.tld" 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 domain.tld.p12 \ -name tomcat \ -password pass:$KEYSTORE_PASSWORD # Conversion en JKS keytool -importkeystore \ -srckeystore domain.tld.p12 \ -srcstoretype PKCS12 \ -srcstorepass $KEYSTORE_PASSWORD \ -destkeystore domain.tld.jks \ -deststoretype JKS \ -deststorepass $KEYSTORE_PASSWORD echo "Copie du keystore vers le serveur MDM..." # Copie et configuration sur le serveur distant scp domain.tld.jks $MDM_USER@$MDM_SERVER:$REMOTE_PATH/ ssh $MDM_USER@$MDM_SERVER "chown tomcat:tomcat $REMOTE_PATH/domain.tld.jks && chmod 600 $REMOTE_PATH/domain.tld.jks && systemctl restart tomcat9" # Nettoyage cd / rm -rf "$TEMP_DIR" echo "Déploiement terminé avec succès!"

Installation du script

chmod +x /usr/local/bin/deploy_cert.sh
ln -s /usr/local/bin/deploy_cert.sh /etc/letsencrypt/renewal-hooks/deploy/deploy_cert

Configuration Tomcat

Le fichier server.xml doit contenir :

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="/var/lib/tomcat9/ssl/domain.tld.jks" certificateKeystorePassword="123456" type="RSA" /> </SSLHostConfig> </Connector>

Test manuel

Pour tester le renouvellement manuellement :

# Test à blanc
certbot renew --dry-run

# Renouvellement forcé
certbot certonly --force-renewal -d votre.domaine.com

Vérification

Pour vérifier l'installation :

Vérifier le statut de Tomcat

systemctl status tomcat9

Vérifier le certificat

curl -v https://votre.domaine.com:8443

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 :

keytool -list -v -keystore keystore.jks

Vérifier la validité du certificat :

openssl x509 -in fullchain.pem -text -noout

Sécurité Certificats Java Automatisation