Outils pour utilisateurs

Outils du site


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

copy_letsencrypt_cert_to_keystore_java.txt · Dernière modification : de inc002