33800 Docs

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