4.47 Comment gérer les certificats SSL/TLS
Sur AWS, le chiffrement SSL/TLS d'une application web est généralement terminé sur l'ELB : le client se connecte au load balancer en HTTPS depuis Internet via une connexion chiffrée, puis le load balancer transmet le trafic en HTTP en interne vers les instances EC2 backend, à l'abri sur le réseau privé du VPC. Le load balancer doit donc présenter un certificat X.509 SSL/TLS, le standard des certificats serveur.
On gère ces certificats avec AWS Certificate Manager (ACM), qui permet de provisionner ou d'importer un certificat puis de le charger sur le load balancer. Sur l'écouteur HTTPS, on définit un certificat par défaut et on peut ajouter une liste de certificats supplémentaires pour servir plusieurs domaines ou plusieurs sites web depuis le même load balancer.
Le rôle du SNI (Server Name Indication)
- SNI est un protocole qui permet à un client TLS d'indiquer le nom du serveur cible dès la première négociation.
- Cela permet de charger plusieurs certificats sur un seul écouteur pour plusieurs sites web.
- Le serveur cherche le certificat correspondant au domaine demandé et fournit le certificat par défaut sinon.
- SNI fonctionne uniquement avec les ALB, NLB et CloudFront, pas avec le CLB.
- On peut aussi définir des security policies pour supporter d'anciennes versions de TLS sur des clients legacy.
Exemple sur un ALB exposant deux sites www.autre.com et www.monsite.com mappés à deux target groups distincts : on attache deux certificats correspondants à chaque hostname. Quand un client demande www.autre.com, le load balancer cherche dans sa liste le certificat qui correspond et redirige vers le bon target group. Sans indication particulière, c'est le certificat par défaut qui est retourné.
Récapitulatif par type d'ELB : le CLB v1 ne supporte qu'un seul certificat SSL — pour publier plusieurs sites HTTPS, il faut multiplier les CLB. L'ALB v2 supporte plusieurs certificats SSL via SNI. Le NLB v2 supporte aussi plusieurs certificats SSL avec SNI sur des listeners TLS.
Côté console, sur un CLB, on modifie l'écouteur pour ajouter le protocole HTTPS sur le port 443, on choisit la stratégie de chiffrement (security policy) puis on sélectionne le certificat — soit existant, soit importé manuellement, soit issu d'ACM (recommandé). Sur un ALB, on ajoute un écouteur HTTPS, on choisit l'action par défaut (forward vers un target group), la security policy et un ou plusieurs certificats ACM / IAM / importés. Sur un NLB, même procédure avec un listener TLS en lieu et place de HTTPS. C'est ainsi qu'on combine SNI et listeners chiffrés sur les load balancers AWS.
En résumé
Cette leçon explique comment gérer les certificats SSL/TLS dans AWS. Les certificats X.509 sont terminés au niveau du Load Balancer pour chiffrer les connexions HTTPS. AWS Certificate Manager (ACM) permet de créer et gérer ces certificats, tandis que le protocole SNI (Server Name Indication) permet de supporter plusieurs certificats sur un seul serveur pour héberger plusieurs sites web.
Points clés
- Les certificats SSL/TLS sont terminés au niveau du Load Balancer (ELB, ALB, NLB) avec chiffrement HTTPS sur le port 443
- AWS Certificate Manager (ACM) est le service principal pour créer, gérer et charger les certificats auprès des Load Balancers
- SNI (Server Name Indication) permet de charger plusieurs certificats sur un seul équilibreur de charge pour supporter plusieurs domaines
- Chaque Load Balancer nécessite un certificat par défaut et peut disposer de certificats supplémentaires pour différents domaines
- Classic Load Balancer (CLB) ne supporte qu'un certificat par équilibreur ; Application Load Balancer (ALB) et Network Load Balancer (NLB) supportent les certificats multiples
- Les stratégies de sécurité permettent de configurer le protocole et le chiffrement, avec support pour les anciennes versions SSL/TLS si nécessaire
Questions fréquentes
Où les certificats SSL/TLS sont-ils terminés dans AWS ?
Les certificats SSL/TLS sont terminés au niveau du Load Balancer (Elastic Load Balancer, Application Load Balancer ou Network Load Balancer). Le load balancer gère la connexion chiffrée HTTPS avec les clients sur le port 443, tandis que le trafic interne vers les instances peut continuer en HTTP.
Comment supporter plusieurs domaines avec un seul Load Balancer ?
Le protocole SNI (Server Name Indication) permet au client d'indiquer le domaine cible lors de la négociation SSL/TLS. Le Load Balancer peut alors fournir le certificat correspondant au domaine demandé. Cette fonctionnalité est supportée par ALB et NLB, mais pas par le Classic Load Balancer.
Quel service AWS utiliser pour gérer les certificats ?
AWS Certificate Manager (ACM) est le service recommandé pour créer, gérer et charger les certificats. Les certificats stockés dans ACM peuvent être directement associés aux Load Balancers via la console AWS lors de la configuration des écouteurs HTTPS.