Sécurité
TLS
Web

mTLS côté serveur web : authentification client par certificats (Nginx/Apache)

15 décembre 2025

3 min de lecture

L’authentification mutuelle TLS (mTLS) renforce HTTPS en exigeant un certificat côté client en plus du certificat serveur.
Objectif : authentifier les clients (humains ou services) sans mot de passe, avec une autorité de certification (CA) de confiance.

Plan de l’article

  • Pré-requis et concepts (CA, CRL/OCSP, chaînage)
  • Générer une CA et des certificats client
  • Activer mTLS avec Nginx
  • Activer mTLS avec Apache
  • Gérer la révocation (CRL/OCSP stapling)
  • Bonnes pratiques et dépannage

Pré-requis et concepts

  • CA (autorité de certification) qui signe les certificats client.
  • Chaîne de confiance : serveur présente sa chaîne, le client présente son cert signé par la CA de confiance du serveur.
  • Revocation : CRL (listes de révocation) et/ou OCSP (vérification en ligne).

Générer une CA et des certificats client (OpenSSL)

Créer une CA minimale :

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out ca.key
openssl req -x509 -new -key ca.key -days 3650 -out ca.crt -subj "/CN=EXAMPLE-CLIENT-CA"

Générer un certificat client :

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out client.key
openssl req -new -key client.key -out client.csr -subj "/CN=alice"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial   -days 365 -out client.crt -extfile <(printf "extendedKeyUsage=clientAuth")

Option PKCS#12 pour import navigateur :

openssl pkcs12 -export -inkey client.key -in client.crt -certfile ca.crt -out client.p12

Activer mTLS avec Nginx

Configuration type :

server {
  listen 443 ssl http2;
  server_name exemple.com;

  ssl_certificate     /etc/ssl/certs/fullchain.pem;
  ssl_certificate_key /etc/ssl/private/privkey.pem;

  # mTLS (vérifie le client)
  ssl_client_certificate /etc/ssl/ca-clients.pem;   # chaîne CA clients
  ssl_verify_client on;                              # on | optional | optional_no_ca
  ssl_verify_depth 2;

  location / {
    proxy_pass http://127.0.0.1:8080;
    # En-têtes d’identité TLS côté amont (optionnel)
    proxy_set_header X-TLS-Client-CN $ssl_client_s_dn;
    proxy_set_header X-TLS-Verified $ssl_client_verify;
  }
}

Déboguer côté Nginx :

error_log /var/log/nginx/error.log info;

Activer mTLS avec Apache (mod_ssl)

Configuration type :

<VirtualHost *:443>
  ServerName exemple.com
  SSLEngine on
  SSLCertificateFile      /etc/ssl/certs/fullchain.pem
  SSLCertificateKeyFile   /etc/ssl/private/privkey.pem

  # mTLS
  SSLCACertificateFile    /etc/ssl/ca-clients.pem   # CA qui signe les clients
  SSLVerifyClient         require                    # none|optional|require
  SSLVerifyDepth          2

  <Location "/">
    Require all granted
    RequestHeader set X-TLS-Client-CN "%{SSL_CLIENT_S_DN}s"
    RequestHeader set X-TLS-Verified "%{SSL_CLIENT_VERIFY}s"
  </Location>
</VirtualHost>

Activer modules requis :

a2enmod ssl headers
systemctl reload apache2

Révocation : CRL et OCSP (stapling)

CRL (fichier) :

# Nginx
ssl_crl /etc/ssl/crl/clients.crl;

# Apache
SSLCARevocationFile /etc/ssl/crl/clients.crl

OCSP stapling (serveur) :

# Nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;

# Apache
SSLUseStapling On
SSLStaplingCache "shmcb:/var/run/ocsp(128000)"

Bonnes pratiques et dépannage

  • Scope : n’activer mTLS que sur les endpoints sensibles (admin/API).
  • UX : côté navigateur, faciliter l’import PKCS#12 (.p12).
  • Sécurité : limiter ssl_verify_depth, tenir à jour la CRL.
  • Observabilité : journaliser $ssl_client_verify, CN, SAN; exporter en métriques.
  • Tests : curl --cert client.crt --key client.key https://exemple.com.
  • Fallback : ssl_verify_client optional le temps de la transition.

Ressources complémentaires

Conclusion

Le mTLS renforce fortement l'authentification sur vos services web.
Avec une CA maîtrisée, CRL/OCSP et un déploiement ciblé, vous obtenez un contrôle d’accès robuste et sans mot de passe pour vos utilisateurs et microservices.

Besoin d'aide sur ce sujet ?

Notre équipe d'experts est là pour vous accompagner dans vos projets d'infrastructure et d'infogérance.

Contactez-nous

Articles similaires