copy_letsencrypt_cert_to_keystore_java
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 :
- hook_certbot.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 tomcatErreur SSH: Vérifier la configuration SSH et les clésTomcat ne démarre pas: Vérifier les logs avec journalctl -u tomcat9Certificat 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
copy_letsencrypt_cert_to_keystore_java.txt · Dernière modification : de inc002
