#!/bin/bash # Vérifier si le script est exécuté en root if [[ $EUID -ne 0 ]]; then echo "❌ Ce script doit être exécuté en tant que root." exit 1 fi # Vérifier si un domaine a été fourni if [[ -z "$1" ]]; then echo "❌ Usage : $0 " exit 2 fi DOMAIN="$1" REVERSED_DOMAIN=$(echo "$DOMAIN" | awk -F. '{for(i=NF; i>0; i--) printf "%s%s", $i, (i>1 ? "." : "")}') VHOST_CONF="/etc/apache2/sites-available/$REVERSED_DOMAIN.conf" LE_DIR="/etc/letsencrypt/live/$DOMAIN" BACKUP_DIR="/etc/apache2/backups" TEMPLATE_DIR="/etc/apache2/templates" TEMPLATE="$TEMPLATE_DIR/vhost-template.conf" CHALLENGE_DIR="/var/www/cedrix" PATH_URL_CEDRIXCHALLENGE="cedrix-challenge" TEST_FILE="test-challenge" TEST_URL="http://${DOMAIN}/.well-known/${PATH_URL_CEDRIXCHALLENGE}/${TEST_FILE}" RANDOM_CONTENT=$(openssl rand -hex 12) # Créer les dossiers nécessaires mkdir -p "$BACKUP_DIR" "$TEMPLATE_DIR" "$CHALLENGE_DIR" chown -R www-data:www-data "$CHALLENGE_DIR" mkdir -p "/var/www/$REVERSED_DOMAIN" chown -R www-data:www-data "/var/www/$REVERSED_DOMAIN" chmod -R 755 "/var/www/$REVERSED_DOMAIN" # Vérifier si le VirtualHost HTTP existe déjà if [[ ! -f "$VHOST_CONF" ]]; then echo "=== Création du fichier VirtualHost HTTP pour $DOMAIN ===" cat > "$VHOST_CONF" < ServerName $DOMAIN DocumentRoot /var/www/$REVERSED_DOMAIN ErrorLog \${APACHE_LOG_DIR}/$REVERSED_DOMAIN-error.log CustomLog \${APACHE_LOG_DIR}/$REVERSED_DOMAIN-access.log combined # Cedrix challenge Alias /.well-known/${PATH_URL_CEDRIXCHALLENGE}/ $CHALLENGE_DIR/ Options +Indexes AllowOverride None Require all granted EOF else echo "✅ VirtualHost HTTP déjà configuré pour $DOMAIN." fi # Activer le VirtualHost et recharger Apache a2ensite "$REVERSED_DOMAIN" systemctl reload apache2 # Vérification d'accès au dossier Let's Encrypt echo "$RANDOM_CONTENT" | sudo tee "$CHALLENGE_DIR/$TEST_FILE" > /dev/null chmod 644 "$CHALLENGE_DIR/$TEST_FILE" RESPONSE=$(curl -s "$TEST_URL") if [[ "$RESPONSE" == "$RANDOM_CONTENT" ]]; then echo "✅ Le dossier est accessible depuis l'extérieur." else echo "❌ Le dossier n'est pas accessible depuis l'extérieur." echo "URL testée : $TEST_URL" echo "Vérifiez votre configuration Apache/Nginx et les permissions." #sudo rm -f "$CHALLENGE_DIR/$TEST_FILE" exit 3 fi # Suppression du fichier test #sudo rm -f "$CHALLENGE_DIR/$TEST_FILE" # Vérifier si le certificat SSL existe déjà if [[ -d "$LE_DIR" ]]; then echo "✅ Certificat SSL déjà installé pour $DOMAIN." else echo "=== Vérification avec un test dry-run de certbot ===" if certbot certonly --dry-run --apache --redirect -d "$DOMAIN"; then echo "✅ Test réussi, la configuration semble correcte." else echo "❌ Le test dry-run de certbot a échoué. Vérifiez votre configuration." exit 4 fi echo "=== Demande du certificat SSL avec Let's Encrypt ===" certbot --apache --redirect -d "$DOMAIN" --non-interactive --agree-tos --register-unsafely-without-email if [[ ! -f "$LE_DIR/fullchain.pem" ]]; then echo "❌ Erreur lors de la génération du certificat SSL." exit 5 fi echo "✅ Certificat SSL installé avec succès." fi # Recharger Apache pour prendre en compte les changements systemctl reload apache2 echo "✅ Virtual Host et certificat SSL configurés pour $DOMAIN avec succès !" exit 0