← Retour
#!/bin/bash
# ===========================================
# Renouvellement automatique certificat wildcard
# Usage: ./renew-wildcard.sh [subdomain]
# Exemple: ./renew-wildcard.sh 33800
# ===========================================
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../../lib/config.sh"
source "$SCRIPT_DIR/../../lib/colors.sh"
SUBDOMAIN="${1:-33800}"
WILDCARD_DOMAIN="*.$SUBDOMAIN.$O2SWITCH_DOMAIN"
BASE_DOMAIN="$SUBDOMAIN.$O2SWITCH_DOMAIN"
print_header "Renouvellement Wildcard SSL"
echo ""
log_info "Domaines à renouveler:"
echo " - $WILDCARD_DOMAIN"
echo " - $BASE_DOMAIN"
echo ""
# Vérifier le certificat actuel
log_step "Vérification du certificat actuel..."
CERT_PATH="/etc/letsencrypt/live/$BASE_DOMAIN/cert.pem"
if ssh "$NGINX_USER@$NGINX_HOST" "test -f $CERT_PATH"; then
EXPIRY=$(ssh "$NGINX_USER@$NGINX_HOST" "openssl x509 -enddate -noout -in $CERT_PATH 2>/dev/null | cut -d= -f2")
EXPIRY_DATE=$(date -d "$EXPIRY" '+%Y-%m-%d' 2>/dev/null || echo "inconnu")
log_info "Expiration actuelle: $EXPIRY_DATE"
# Calculer jours restants
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s 2>/dev/null || echo 0)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))
if [ "$DAYS_LEFT" -gt 30 ]; then
log_warn "Le certificat expire dans $DAYS_LEFT jours"
echo ""
read -p "Voulez-vous quand même renouveler ? [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "Annulé"
exit 0
fi
else
log_warn "Le certificat expire dans $DAYS_LEFT jours - renouvellement recommandé"
fi
else
log_info "Nouveau certificat (pas de certificat existant trouvé)"
fi
echo ""
log_step "Lancement de certbot avec hooks DNS o2switch..."
echo ""
# Copier les hooks sur le serveur nginx
log_info "Copie des hooks sur le serveur nginx..."
ssh "$NGINX_USER@$NGINX_HOST" "mkdir -p /tmp/certbot-hooks"
scp -q "$SCRIPT_DIR/auth-hook.sh" "$NGINX_USER@$NGINX_HOST:/tmp/certbot-hooks/"
scp -q "$SCRIPT_DIR/cleanup-hook.sh" "$NGINX_USER@$NGINX_HOST:/tmp/certbot-hooks/"
scp -q "$SCRIPT_DIR/../../lib/config.sh" "$NGINX_USER@$NGINX_HOST:/tmp/certbot-hooks/"
# Créer le répertoire lib sur nginx
ssh "$NGINX_USER@$NGINX_HOST" "mkdir -p /tmp/certbot-hooks/lib && mv /tmp/certbot-hooks/config.sh /tmp/certbot-hooks/lib/"
# Rendre les hooks exécutables
ssh "$NGINX_USER@$NGINX_HOST" "chmod +x /tmp/certbot-hooks/*.sh"
# Lancer certbot sur le serveur nginx
log_step "Exécution de certbot..."
ssh "$NGINX_USER@$NGINX_HOST" "sudo certbot certonly \
--manual \
--preferred-challenges dns \
--manual-auth-hook /tmp/certbot-hooks/auth-hook.sh \
--manual-cleanup-hook /tmp/certbot-hooks/cleanup-hook.sh \
--agree-tos \
--no-eff-email \
--email admin@$O2SWITCH_DOMAIN \
-d '$WILDCARD_DOMAIN' \
-d '$BASE_DOMAIN' \
--force-renewal"
# Vérifier le résultat
if [ $? -eq 0 ]; then
echo ""
log_success "Certificat renouvelé avec succès!"
# Afficher les nouvelles infos
NEW_EXPIRY=$(ssh "$NGINX_USER@$NGINX_HOST" "openssl x509 -enddate -noout -in $CERT_PATH 2>/dev/null | cut -d= -f2")
log_info "Nouvelle expiration: $NEW_EXPIRY"
# Recharger nginx
log_step "Rechargement de nginx..."
ssh "$NGINX_USER@$NGINX_HOST" "sudo systemctl reload nginx"
log_success "Nginx rechargé"
else
log_error "Échec du renouvellement"
echo ""
log_info "Consultez les logs: ssh $NGINX_USER@$NGINX_HOST 'cat /tmp/certbot-dns-hook.log'"
exit 1
fi
# Nettoyage
ssh "$NGINX_USER@$NGINX_HOST" "rm -rf /tmp/certbot-hooks"
echo ""
print_separator
log_success "Wildcard SSL renouvelé pour *.$SUBDOMAIN.$O2SWITCH_DOMAIN"