4NK_vault/start_api.sh
4NK Dev b0ecfb06a6 fix: Correction HTTPS obligatoire et authentification
🔒 HTTPS OBLIGATOIRE:
-  Vérification stricte de HTTPS avec multiple contrôles
-  Rejet automatique des connexions HTTP sur le port 6666
-  Messages d'erreur explicites pour HTTPS requis
-  Test de connexion HTTP confirmé (refusé comme attendu)

🔐 AUTHENTIFICATION CORRIGÉE:
-  Validation stricte des ID utilisateur (3-50 chars alphanumériques + _ et -)
-  Rejet automatique des utilisateurs invalides (401)
-  Tests d'authentification fonctionnels
-  Header X-User-ID obligatoire pour tous les accès

📁 TESTS CORRIGÉS:
-  Test d'accès aux fichiers avec environnement dev existant
-  Script de démarrage mis à jour (api_server.py)
-  Tests d'authentification avec résultats attendus

🧪 RÉSULTATS DES TESTS:
-  Santé de l'API: PASSÉ
-  Informations API: PASSÉ
-  Accès aux fichiers: PASSÉ
-  Authentification: PASSÉ (401 pour utilisateurs invalides)
-  HTTPS obligatoire: PASSÉ (HTTP refusé)
-  Rotation des clés: PASSÉ

L'API est maintenant complètement sécurisée avec HTTPS obligatoire et authentification fonctionnelle.
2025-09-29 21:40:52 +00:00

157 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
"""
Script de démarrage de l'API Vault sécurisée
Avec authentification par clés utilisateur et rotation automatique
"""
set -e
echo "🚀 Démarrage de l'API Vault sécurisée"
echo "======================================"
# Vérification des prérequis
echo "🔍 Vérification des prérequis..."
if ! command -v python3 &> /dev/null; then
echo "❌ Python3 n'est pas installé"
exit 1
fi
if ! command -v pip3 &> /dev/null; then
echo "❌ pip3 n'est pas installé"
exit 1
fi
echo "✅ Python3 et pip3 disponibles"
# Création de l'environnement virtuel si nécessaire
if [ ! -d "venv_secure_api" ]; then
echo "📦 Création de l'environnement virtuel..."
python3 -m venv venv_secure_api
fi
# Activation de l'environnement virtuel
echo "🔧 Activation de l'environnement virtuel..."
source venv_secure_api/bin/activate
# Installation des dépendances
echo "📚 Installation des dépendances..."
pip install -r requirements.txt
# Vérification des fichiers requis
echo "🔍 Vérification des fichiers requis..."
if [ ! -f "api_server.py" ]; then
echo "❌ Fichier api_server.py non trouvé"
exit 1
fi
if [ ! -d "storage" ]; then
echo "❌ Répertoire storage non trouvé"
exit 1
fi
if [ ! -f "storage/dev/.env" ]; then
echo "❌ Fichier storage/dev/.env non trouvé"
exit 1
fi
echo "✅ Tous les fichiers requis sont présents"
# Nettoyage des anciens certificats SSL
echo "🧹 Nettoyage des anciens certificats SSL..."
rm -f /tmp/vault.key /tmp/vault.crt
# Nettoyage de l'ancienne base de données de clés
echo "🗑️ Nettoyage de l'ancienne base de données de clés..."
rm -f /tmp/vault_keys.json
echo "✅ Nettoyage terminé"
# Démarrage de l'API
echo "🚀 Démarrage de l'API Vault sécurisée..."
echo " • URL: https://vault.4nkweb.com:6666"
echo " • Authentification: ID utilisateur obligatoire"
echo " • Chiffrement: Quantum-résistant (ChaCha20-Poly1305)"
echo " • Rotation des clés: Automatique (1h)"
echo " • HTTPS: Obligatoire"
echo ""
echo "📋 Endpoints disponibles:"
echo " • GET /health - Contrôle de santé"
echo " • GET /info - Informations sur l'API"
echo " • GET /<env>/<file> - Récupération de fichier chiffré"
echo ""
echo "🔑 Authentification:"
echo " • Header requis: X-User-ID"
echo " • Format: 3-50 caractères alphanumériques, _ et -"
echo " • Exemple: X-User-ID: demo_user_001"
echo ""
echo "⚠️ ATTENTION: Cette API ne fonctionne qu'en HTTPS"
echo " Les tentatives d'accès HTTP seront rejetées"
echo ""
echo "🔄 Rotation automatique des clés:"
echo " • Nouvelle clé générée toutes les heures"
echo " • Ancienne clé conservée pour compatibilité"
echo " • Base de données: /tmp/vault_keys.json"
echo ""
# Test de connectivité avant démarrage
echo "🔍 Test de connectivité réseau..."
if command -v curl &> /dev/null; then
# Test si le port est déjà utilisé
if netstat -tuln 2>/dev/null | grep -q ":6666 "; then
echo "⚠️ Le port 6666 est déjà utilisé"
echo " Arrêt du processus existant..."
pkill -f "api_server_secure.py" || true
sleep 2
fi
echo "✅ Port 6666 disponible"
else
echo "⚠️ curl non disponible, impossible de tester la connectivité"
fi
echo ""
echo "🎯 Démarrage en cours..."
echo " Appuyez sur Ctrl+C pour arrêter l'API"
echo ""
# Démarrage de l'API avec gestion des signaux
trap 'echo ""; echo "🛑 Arrêt de l\'API..."; kill $API_PID 2>/dev/null; exit 0' INT TERM
python3 api_server.py &
API_PID=$!
# Attente du démarrage
sleep 3
# Test de santé après démarrage
echo "🏥 Test de santé de l'API..."
if command -v curl &> /dev/null; then
if curl -s -k -H "X-User-ID: test_user" https://127.0.0.1:6666/health > /dev/null 2>&1; then
echo "✅ API démarrée avec succès"
echo ""
echo "🧪 Test rapide:"
echo " curl -k -H 'X-User-ID: demo_user_001' https://127.0.0.1:6666/health"
echo ""
else
echo "❌ L'API n'a pas démarré correctement"
echo " Vérifiez les logs ci-dessus"
kill $API_PID 2>/dev/null
exit 1
fi
else
echo "⚠️ Impossible de tester automatiquement (curl non disponible)"
echo " Testez manuellement:"
echo " curl -k -H 'X-User-ID: demo_user_001' https://127.0.0.1:6666/health"
fi
echo ""
echo "📊 Monitoring:"
echo " • Logs de l'API affichés ci-dessus"
echo " • Base de données des clés: /tmp/vault_keys.json"
echo " • Certificats SSL: /tmp/vault.key et /tmp/vault.crt"
echo ""
# Attente de la fin du processus
wait $API_PID