haproxy_ssl_termination

Le répartiteur de charge HAProxy fournit une terminaison SSL haute performance, vous permettant de crypter et décrypter le trafic.

Activez rapidement et facilement le cryptage SSL/TLS pour vos applications avec la terminaison SSL HAProxy. HAProxy est compilé avec OpenSSL qui lui permet de crypter et décrypter le trafic au fur et à mesure qu’il passe. Dans cet article de blog, apprenez comment configurer cette fonction et pourquoi elle pourrait simplifier votre infrastructure.

Les avantages de la terminaison SSL

Lorsque vous exploitez une grappe de serveurs, la maintenance des certificats SSL peut être une tâche fastidieuse. Même l’utilisation d’un Certbot Let’s Encrypt pour mettre à jour automatiquement les certificats s’avère compliquée car il faudrait exposer vos serveurs Web depuis Internet pour que Let’s Encrypt puisse vérifier que vous êtes propriétaire de votre domaine.

L’activation du SSL sur vos serveurs Web entraîne également une augmentation de l’utilisation du processeur, car ces serveurs doivent aussi crypter et au décrypter des messages alors que le CPU pourrait exécuter d’autres tâches utiles, par exemple traiter les requêtes plus rapidement.

Le terme terminaison SSL signifie que le chiffrement et le déchiffrement sont effectués à la périphérie de votre réseau, par exemple au niveau du répartiteur de charge. Le répartiteur de charge supprime le chiffrement et transmet les messages en clair à vos serveurs. Cela s’appelle également le déchargement SSL.

La terminaison SSL présente de nombreux avantages, notamment :

  • Vous pouvez conserver des certificats dans moins d’endroits pour faciliter votre travail.
  • Vous n’avez pas besoin d’exposer vos serveurs à l’Internet pour renouveler les certificats.
  • Les serveurs sont déchargés du traitement des messages cryptés, ce qui libère du temps de CPU.

Activer SSL avec HAProxy

La version 1.5 de HAProxy, lancée en 2016, a introduit la possibilité de gérer le chiffrement et le déchiffrement SSL sans outils supplémentaires comme Stunnel ou Pound. Activez-la en modifiant votre fichier de configuration HAProxy, en ajoutant les paramètres ssl et crt à une ligne bind dans une section frontend. Voici un exemple :

Le paramètre ssl active la terminaison SSL pour ce listener. Le paramètre crt identifie l’emplacement du certificat SSL au format PEM. Ce certificat doit contenir le certificat public et la clé privée. Une fois le trafic décrypté, HAProxy peut l’inspecter et le modifier, par exemple pour changer les en-têtes HTTP, router en fonction du chemin URL ou de l’hôte, et lire les cookies. Les messages sont également transmis aux serveurs backend sans le cryptage.

Même si vous perdez quelques avantages de la terminaison SSL en procédant ainsi, vous pourrez ré-encrypter les données avant de les relayer en ajoutant un paramètre ssl aux lignes server dans la section backend. Voici un exemple :

Lorsque HAProxy négocie la connexion avec le serveur, il vérifie s’il fait confiance au certificat SSL de ce serveur. Si le serveur utilise un certificat signé par une autorité de certification privée, vous pouvez soit ignorer la vérification en ajoutant verify none à la ligne server, soit stocker le certificat CA sur le répartiteur de charge et le référencer avec le paramètre ca-file. Voici un exemple qui fait référence au fichier PEM du CA :

Si le certificat est auto-signé, il agit comme sa propre autorité de certification, donc vous pouvez le référencer directement.

Redirection de HTTP vers HTTPS

Souvent, lorsqu’une personne rentre votre nom de domaine dans sa barre d’adresse, elle n’inclue pas https://. Elle sera donc envoyée vers la version http:// de votre site. Si vous utilisez HAProxy pour la terminaison SSL, vous pouvez rediriger tout le trafic reçu sur le port 80 HTTP vers le port 443 HTTPS.

Ajoutez une ligne de schéma de redirection http-request pour acheminer le trafic de HTTP à HTTPS, comme ceci :

Cette ligne utilise le mot clé unless pour vérifier la méthode d’extraction ssl_fc qui renvoie true, sauf si la connexion a utilisé SSL/TLS. Si ce n’est pas le cas, la requête est redirigée vers le schéma https. Désormais, tout le trafic passe par HTTPS.

Cela permet l’ajout d’un en-tête HSTS pour indiquer à un navigateur d’utiliser HTTPS dès le départ lors de sa prochaine visite sur votre site. Vous pouvez ajouter un en-tête HSTS en suivant les instructions dans notre article de blog, En-tête HAProxy et HTTP Strict Transport Security (HSTS) dans les redirections HTTP.

Limitation des versions de SSL prises en charge

Au fur et à mesure des découvertes de vulnérabilités dans les anciennes versions de SSL et TLS, ces versions deviennent dépréciées et ne doivent plus être utilisées. Avec HAProxy, c’est possible d’autoriser uniquement certaines versions de SSL. Ajoutez une directive ssl-min-ver à un frontend pour spécifier la version la plus ancienne que vous souhaitez prendre en charge.

Dans l’exemple suivant, seule la version TLS 1.2 et plus récente est autorisée :

Voici les valeurs possibles pour ce paramètre :

  • SSLv3
  • TLSv1.0
  • TLSv1.1
  • TLSv1.2
  • TLSv1.3

Vous pouvez définir cette option pour tous les proxies en l’ajoutant à votre section global sous la forme d’une directive ssl-default-bind-options, comme indiqué :

Limitation des certificats pris en charge

En plus de spécifier les versions autorisées de SSL et TLS, vous pouvez définir les algorithmes de chiffrement à utiliser en ajoutant un paramètre ciphers à la ligne bind. Ils sont définis dans l’ordre préférentiel, avec les algorithmes de fallback à la fin de la liste. HAProxy sélectionnera le premier chiffre que le client supporte également, sauf lorsque le paramètre prefer-client-ciphers est présent, auquel cas le chiffre préféré du client est sélectionné.

Ça ressemble à ce qui suit :

Pensez à utiliser le générateur de configuration SSL de Mozilla pour choisir les algorithmes de chiffrement à inclure.

Vous pouvez également définir une valeur par défaut en ajoutant une directive ssl-default-bind-ciphers à votre section global, comme indiqué :

Choisir le certificat avec SNI

L’indication de nom de serveur (SNI) est une extension TLS qui permet au navigateur d’inclure le nom d’hôte du site qu’il tente d’atteindre dans les informations de prise de contact TLS. Vous pouvez l’utiliser pour choisir dynamiquement le certificat à servir.

Au lieu de définir le paramètre crt sur le chemin d’accès à un seul fichier de certificat, spécifiez un répertoire contenant plusieurs fichiers PEM. HAProxy trouvera le bon en recherchant un nom commun correspondant ou un autre nom de sujet.

Voici un exemple :

Si le client n’envoie pas d’informations SNI, HAProxy utilise le premier fichier listé dans le répertoire, trié par ordre alphabétique. Par conséquent, nommez les fichiers PEM de sorte que le certificat par défaut soit listé en premier.

Prise en charge des certificats EC et RSA

HAProxy prend en charge les certificats Elliptic Curve (EC) et RSA et choisira celui que le client prend en charge. Pour activer cette fonction, stockez les deux certificats sur le serveur du répartiteur de charge, en nommant l’un avec une extension .rsa et l’autre avec une extension .ecdsa. Par exemple, mycert.pem.rsa et mycert.pem.ecdsa. Ensuite, dans la configuration de HAProxy, laissez tomber l’extension, comme ceci :

Certificats des clients

Limitez l’accès à votre application en donnant aux clients de confiance un certificat à présenter lors de la connexion. HAProxy le vérifiera si vous ajoutez un paramètre verify required à la ligne bind, comme indiqué :

En plus de verify required, vous pouvez utiliser ca-file pour définir un chemin d’accès à un fichier CA pour vérifier que le certificat du client est signé et fiable. Vous pouvez également inclure un paramètre crl-file pour indiquer une liste de révocation de certificat.

Conclusion

Dans cet article de blog, vous avez vu comment activer la terminaison SSL avec HAProxy pour gérer le cryptage et le décryptage. Ceci présente plusieurs avantages, notamment pour réduire la charge de travail sur vos backends, faciliter la maintenance des certificats et éviter d’exposer vos serveurs directement à Internet pour le renouvellement des certificats.

Vous voulez rester au courant de sujets comme celui-ci ? Suivez-nous sur Twitter et abonnez-vous à ce blog ! Vous pouvez également rejoindre la conversation sur Slack.

Explorez les fonctionnalités avancées disponibles dans HAProxy Enterprise. Contactez-nous pour en savoir plus et vous inscrire à un essai gratuit.

SHARE THIS ARTICLE