Le défi de l'air-gap
Un réseau air-gap est physiquement isolé d'internet. Hôpitaux HDS, centrales nucléaires, réseaux militaires, usines critiques — les déploiements sans internet nécessitent une stratégie complète : comment pré-charger les packages, vérifier leur intégrité sans connexion externe et distribuer les mises à jour sans CDN ?
Dans un environnement air-gap, toute vérification d'intégrité qui nécessite une connexion externe est une vérification qui ne se fait pas. Le système de signature ECDSA de Universal Installer est conçu pour fonctionner 100% offline.
Créer un mirror local
# Sur une machine connectée : créer le bundle air-gap
universal-installer airgap bundle --source dist/app_v1.1.uxc --include-keys keys/ --include-installer \ # inclure universal-installer lui-même
--include-python \ # inclure Python 3.12 si non garanti
--output airgap_bundle_v1.1/
# airgap_bundle_v1.1/
# ├── app_v1.1.uxc
# ├── app_v1.1.uxc.sig
# ├── manifest.json
# ├── keys/public.pem
# ├── universal-installer.exe
# └── install.bat / install.sh
Transfert air-gap
# Options de transfert physique
# 1. Clé USB chiffrée (VeraCrypt / BitLocker)
# 2. DVD/Blu-ray signé GPG
# 3. Diode réseau unidirectionnelle (transfert sans retour)
# Vérifier l'intégrité après transfert (AVANT d'exécuter)
universal-installer verify app_v1.1.uxc --sig app_v1.1.uxc.sig --pubkey keys/public.pem --offline # aucune requête réseau
# → ✓ Signature ECDSA valide — offline — 2026-12-01
Serveur de distribution interne
# Démarrer un serveur de distribution local
# (remplace le CDN cloud pour les postes du réseau air-gap)
universal-installer serve --dir airgap_bundle_v1.1/ --port 8080 --bind 192.168.1.10 --auth-token vault:INTERNAL_DIST_TOKEN
# Sur les postes clients (même réseau interne)
from universal_installer.updater import UpdateChecker
checker = UpdateChecker(
manifest_url="http://192.168.1.10:8080/manifest.json",
public_key_path="keys/public.pem",
current_version="1.0.0",
offline_mode=True # pas de vérification de révocation en ligne
)
Rotation des clés en air-gap
La rotation des clés ECDSA en environnement air-gap nécessite une procédure rigoureuse :
- Générer la nouvelle paire de clés sur une machine offline.
- Créer un document de transition signé avec l'ancienne clé privée, contenant la nouvelle clé publique.
- Transférer le document de transition via le canal air-gap habituel.
- Les clients valident le document de transition avec l'ancienne clé publique, puis adoptent la nouvelle.
- L'ancienne clé privée est détruite (cérémoniel de destruction documenté).
Conclusion
Universal Installer V2 est conçu pour fonctionner 100% offline dès la création du bundle air-gap. La vérification ECDSA P-384 ne nécessite aucune connexion externe — la clé publique est distribuée avec le bundle. Le serveur de distribution interne remplace le CDN cloud pour les mises à jour intra-réseau. Pour les environnements les plus stricts (réseau unidirectionnel), le bundle peut être distribué sur support physique avec vérification GPG préalable.