Chapitre 11
11 — VPN & TLS
> IPsec (IKEv1/v2, ESP, AH), WireGuard, OpenVPN, TLS 1.3, mTLS, ACME, Certificats
Cours 11 — VPN & TLS
Durée : 6 séances | Niveau : Avancé
1. IPsec
1.1 Présentation
IPsec (Internet Protocol Security) est un ensemble de protocoles pour sécuriser les communications IP via le chiffrement et l'authentification.
Diagramme en cours de génération...
1.2 Modes IPsec
Mode Transport : Protège seulement la charge utile (pas l'en-tête IP)
| IP | ESP | Payload | ESP-Trailer |
Mode Tunnel : Protège tout le paquet original
| New IP | ESP | IP | Payload | ESP-Trailer |
Diagramme en cours de génération...
1.3 IKEv1 vs IKEv2
| Critère | IKEv1 | IKEv2 |
|---|---|---|
| RFC | 2409 | 7296 |
| Échanges | Main/Aggressive/Quick | 4 messages (2 échanges) |
| Mobilité | Peu supportée | MOBIKE intégré |
| NAT-T | Optionnel | Intégré |
| Complexité | Élevée | Réduite |
| Sécurité | Moins robuste | Plus robuste |
1.4 Configuration IPsec (strongSwan)
# /etc/ipsec.conf - Site-to-Site IPsec IKEv2
config setup
charondebug="ike 2, knl 2, cfg 2"
conn site-a-to-site-b
type=tunnel
keyexchange=ikev2
authby=secret
left=203.0.113.1
leftsubnet=10.0.1.0/24
leftid=@site-a.example.com
right=198.51.100.1
rightsubnet=10.0.2.0/24
rightid=@site-b.example.com
ike=aes256-sha256-modp2048!
esp=aes256gcm128-sha256-modp2048!
dpdaction=restart
auto=start
# /etc/ipsec.secrets
203.0.113.1 198.51.100.1 : PSK "shared-secret-key-here"
2. WireGuard
2.1 Présentation
WireGuard est un VPN moderne, simple et performant, utilisant le protocole Noise et Curve25519.
Caractéristiques :
- ~4000 lignes de code (vs 600k+ pour OpenVPN)
- Chiffrement : Curve25519, ChaCha20, Poly1305, BLAKE2s
- Clés publiques/privées (pas de certificats)
- Handshake compact (1 RTT)
- Intégré dans le noyau Linux (5.6+)
2.2 Handshake WireGuard
Diagramme en cours de génération...
2.3 Configuration WireGuard
# /etc/wireguard/wg0.conf - Serveur
[Interface]
Address = 10.0.0.1/24
PrivateKey = <server-private-key>
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
[Peer]
PublicKey = <client1-public-key>
AllowedIPs = 10.0.0.2/32
[Peer]
PublicKey = <client2-public-key>
AllowedIPs = 10.0.0.3/32
# /etc/wireguard/wg0.conf - Client
[Interface]
Address = 10.0.0.2/24
PrivateKey = <client-private-key>
DNS = 1.1.1.1
[Peer]
PublicKey = <server-public-key>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
2.4 Commandes WireGuard
# Génération des clés
wg genkey | tee privatekey | wg pubkey > publickey
# Démarrer l'interface
wg-quick up wg0
# Status
wg show
# Debug
wg showconf wg0
tcpdump -i wg0
3. OpenVPN
3.1 Architecture
Diagramme en cours de génération...
3.2 Configuration OpenVPN
# /etc/openvpn/server.conf
port 1194
proto udp
dev tun
# Certificats
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
# Réseau
server 10.8.0.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"
# Sécurité
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
# Keepalive
keepalive 10 60
# Compression
compress lz4-v2
# Log
status openvpn-status.log
verb 3
4. TLS 1.3
4.1 Handshake TLS 1.3
Diagramme en cours de génération...
Améliorations TLS 1.3 vs 1.2 :
- Handshake réduit à 1 RTT (vs 2 RTT)
- 0-RTT pour les clients ayant déjà communiqué
- Suppression des algorithmes obsolètes (RSA key transport, CBC, SHA-1, 3DES)
- Perfect Forward Secrecy (PFS) obligatoire
4.2 0-RTT
Diagramme en cours de génération...
Utilisation : Requêtes HTTP idempotentes (GET), session reprise
Risques : Replay attacks → nécessite Anti-Replay機制
4.3 PSK (Pre-Shared Key)
TLS 1.3 supporte le mode PSK pour les sessions pré-établies :
ClientHello + PSK Key Establishment
↓
ServerHello + PSK Accept
↓
Application Data (chiffrée)
5. mTLS (Mutual TLS)
5.1 Principe
Dans mTLS, le client ET le serveur présentent un certificat pour s'authentifier mutuellement.
Diagramme en cours de génération...
5.2 Chaîne de certificats
Root CA (auto-signé)
└── Intermediate CA (signé par Root)
├── Server Certificate
└── Client Certificate
5.3 Configuration mTLS (Nginx)
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;
# mTLS
ssl_client_certificate /etc/ssl/certs/ca.crt;
ssl_verify_client on;
ssl_verify_depth 2;
location / {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
proxy_pass http://backend;
}
}
5.4 SPIFFE
SPIFFE (Secure Production Identity Framework for Everyone) standardise l'identité des workloads :
spiffe://trust-domain/path/workload-id
spiffe://example.com/ns/default/sa/web-service
6. Gestion des certificats
6.1 Let's Encrypt + ACME
# Installation certbot
sudo apt install certbot python3-certbot-nginx
# Obtention certificat
sudo certbot --nginx -d example.com -d www.example.com
# Renouvellement automatique
sudo certbot renew --dry-run
6.2 cert-manager (Kubernetes)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-com-tls
spec:
secretName: example-com-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- example.com
- www.example.com
6.3 ACME Protocol
Diagramme en cours de génération...
7. Site-to-site vs Remote Access
7.1 Site-to-Site VPN
Diagramme en cours de génération...
Cas d'usage : Connecter des datacenters, des bureaux, ou des VPC cloud.
7.2 Remote Access VPN
Diagramme en cours de génération...
Cas d'usage : Télétravail, accès distant aux ressources internes.
7.3 Comparatif
| Critère | IPsec | WireGuard | OpenVPN |
|---|---|---|---|
| Performance | Bonne | Excellente | Moyenne |
| Simplicité | Complexe | Très simple | Modéré |
| Sécurité | Excellente | Excellente | Bonne |
| Mobilité | MOBIKE | Roaming natif | Modérée |
| Intégration noyau | Non | Oui (Linux 5.6+) | Non |
| Débit max | 1-10 Gbps | 10+ Gbps | 0.5-2 Gbps |
8. Bonnes pratiques
- Utiliser IKEv2 plutôt qu'IKEv1
- Préférer WireGuard pour les nouveaux déploiements
- Toujours utiliser TLS 1.2 minimum (TLS 1.3 si possible)
- mTLS pour les communications inter-services
- ACME pour l'automatisation des certificats
- Rotation régulière des clés
- Monitoring des tunnels VPN (latence, débit, uptime)
Résumé
Diagramme en cours de génération...