← Retour
#!/bin/bash
# ===========================================
# Renouvellement wildcard SSL - Mode Manuel
# Usage: ./renew-wildcard-manual.sh [subdomain]
# Exemple: ./renew-wildcard-manual.sh 33800
# ===========================================
# Ce script guide l'utilisateur pour créer
# manuellement le TXT DNS sur o2switch
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 (Mode Manuel)"
echo ""
log_info "Domaines à renouveler:"
echo " - $WILDCARD_DOMAIN"
echo " - $BASE_DOMAIN"
echo ""
# Vérifier le certificat actuel sur nginx
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" 2>/dev/null; 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" '+%d/%m/%Y' 2>/dev/null || echo "inconnu")
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 0 ]; then
log_info "Expiration: $EXPIRY_DATE ($DAYS_LEFT jours restants)"
else
log_error "Certificat EXPIRÉ depuis $((-DAYS_LEFT)) jours!"
fi
else
log_warn "Aucun certificat existant trouvé"
fi
echo ""
print_separator
echo ""
log_step "Lancement de certbot en mode manuel..."
echo ""
log_warn "Tu vas devoir créer un enregistrement TXT manuellement sur o2switch"
echo ""
# Instructions
cat << 'INSTRUCTIONS'
┌─────────────────────────────────────────────────────────────────┐
│ ÉTAPES À SUIVRE : │
│ │
│ 1. Certbot va afficher une valeur de challenge │
│ │
│ 2. Va sur https://yellow.o2switch.net:2083 │
│ → Zone Editor → Manage → Add Record │
│ │
│ 3. Crée un enregistrement TXT : │
│ Nom: _acme-challenge.33800 │
│ Type: TXT │
│ Valeur: [la valeur affichée par certbot] │
│ TTL: 60 │
│ │
│ 4. Attends ~1 minute pour la propagation DNS │
│ │
│ 5. Appuie sur Entrée dans certbot │
│ │
│ 6. IMPORTANT: Supprime le TXT après validation! │
└─────────────────────────────────────────────────────────────────┘
INSTRUCTIONS
echo ""
read -p "Appuie sur Entrée pour lancer certbot..."
echo ""
log_step "Connexion à nginx et lancement de certbot..."
echo ""
# Lancer certbot sur nginx en mode interactif
ssh -t "$NGINX_USER@$NGINX_HOST" "sudo certbot certonly \
--manual \
--preferred-challenges dns \
--agree-tos \
--no-eff-email \
--email admin@$O2SWITCH_DOMAIN \
-d '$WILDCARD_DOMAIN' \
-d '$BASE_DOMAIN'"
RESULT=$?
echo ""
if [ $RESULT -eq 0 ]; then
log_success "Certificat renouvelé avec succès!"
# Afficher nouvelle expiration
NEW_EXPIRY=$(ssh "$NGINX_USER@$NGINX_HOST" "openssl x509 -enddate -noout -in $CERT_PATH 2>/dev/null | cut -d= -f2")
NEW_DATE=$(date -d "$NEW_EXPIRY" '+%d/%m/%Y' 2>/dev/null || echo "$NEW_EXPIRY")
log_info "Nouvelle expiration: $NEW_DATE"
# Recharger nginx
log_step "Rechargement de nginx..."
ssh "$NGINX_USER@$NGINX_HOST" "sudo systemctl reload nginx"
log_success "Nginx rechargé"
echo ""
print_separator
echo ""
log_warn "N'oublie pas de SUPPRIMER l'enregistrement TXT sur o2switch!"
echo " → Zone Editor → cherche _acme-challenge.33800 → Delete"
echo ""
else
log_error "Échec du renouvellement (code: $RESULT)"
echo ""
log_info "Vérifie que:"
echo " - Le TXT a bien été créé sur o2switch"
echo " - Le TTL est court (60 secondes)"
echo " - Tu as attendu assez pour la propagation DNS"
echo ""
log_info "Pour vérifier le TXT: dig TXT _acme-challenge.$SUBDOMAIN.$O2SWITCH_DOMAIN"
fi