Cours Aws

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.