MFormations
Modern Network Engineering

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èreIKEv1IKEv2
RFC24097296
ÉchangesMain/Aggressive/Quick4 messages (2 échanges)
MobilitéPeu supportéeMOBIKE intégré
NAT-TOptionnelIntégré
ComplexitéÉlevéeRéduite
SécuritéMoins robustePlus 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èreIPsecWireGuardOpenVPN
PerformanceBonneExcellenteMoyenne
SimplicitéComplexeTrès simpleModéré
SécuritéExcellenteExcellenteBonne
MobilitéMOBIKERoaming natifModérée
Intégration noyauNonOui (Linux 5.6+)Non
Débit max1-10 Gbps10+ Gbps0.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...