Exécuter des protocoles SSL et non-SSL sur le même port avec NGINX 1.15.2

NGINX | 24 juillet 2018

Nous avons le plaisir d’annoncer aujourd’hui la disponibilité de NGINX Open Source 1.15.2. L’une des principales nouveautés de cette version est la nouvelle variable « $ssl_preread_protocol », qui permet de distinguer SSL/TLS des autres protocoles lors du transfert du trafic à l’aide d’un proxy TCP (stream). Cette fonctionnalité est utile si vous souhaitez contourner les restrictions d’un pare-feu, par exemple en exécutant des services SSL/TLS et SSH sur le même port.

La nouvelle fonctionnalité sera également proposée aux clients de NGINX Plus dans la prochaine version NGINX Plus R16.

Quand et comment utiliser $ssl_preread_protocol

Lorsque vous terminez et déchiffrez le trafic SSL/TLS à l’aide des modules « http » ou « stream », la variable $ssl_protocol (http, stream) enregistre la version de SSL ou TLS utilisée par le client. Toutefois, il peut arriver que vous souhaitiez simplement transférer le trafic SSL/TLS sans le déchiffrer, en utilisant les modules « stream » pour mettre en œuvre un proxy TCP de base ou un équilibreur de charge.

Le module stream_ssl_preread inspecte le message ClientHello initial d’une connexion SSL ou TLS et en extrait plusieurs valeurs qui peuvent être utilisées pour gérer la connexion. La variable $ssl_preread_protocol, ajoutée dans la version 1.15.2, récupère le numéro de la version SSL/TLS la plus récente à partir du champ client_version du message ClientHello. Si l’extension supported_versions est présente dans le message ClientHello, la variable est alors définie sur TLSv1.3.

Si une connexion n’utilise aucune version de SSL ou TLS, la variable « $ssl_preread_protocol » sera vide, ce qui indique que la connexion utilise un protocole autre que SSL/TLS, tel que SSH.

L’extrait de configuration suivant utilise la variable « $ssl_preread_protocol » dans un bloc map afin d’attribuer à la variable « $upstream » le nom du groupe en amont correspondant au protocole utilisé pour la connexion. La directive proxy_pass transmet ensuite la requête au groupe en amont sélectionné. Notez que la directive ssl_preread on doit être incluse dans le bloc server pour que la variable « $ssl_preread_protocol » fonctionne.

stream {    upstream ssh {
        server 192.0.2.1:22;
    }

    upstream web {
        server 192.0.2.2:443;
    }

    map $ssl_preread_protocol $upstream {
        default ssh;
        "TLSv1.2" web;
    }

    # SSH and SSL on the same port
    server {
        listen 443;

        proxy_pass $upstream;
        ssl_preread on;
    }
}

Pour que la configuration soit effective, les clients doivent accéder au serveur SSH sur le port 443 au lieu du port 22 par défaut. Avec le client SSH intégré à macOS et Linux, par exemple, vous pouvez utiliser l’option -p pour changer de port :

$ ssh ssh-server-ip-address -p 443

Comment obtenir la dernière version de NGINX

La dernière version de NGINX est toujours disponible dans la branche principale de notre dépôt officiel.

En savoir plus

NGINX Open Source 1.15.2 comprend des améliorations supplémentaires et des corrections de bugs. Pour obtenir la liste complète des nouveautés, consultez le journal des modifications de NGINX.


Partager

À propos de l’auteur

Articles de blog associés

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA
NGINX | 13/10/2025

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA

Découvrez les principaux enseignements tirés des réponses à l’enquête annuelle F5 NGINX sur les dernières tendances en matière de technologies cloud natives, de sécurité, d’ingénierie de plateforme et d’IA.

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?
NGINX | 03/11/2023

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?

Lorsque de nouvelles CVE sont signalées, il est facile de ne plus savoir si elles concernent un outil de contrôleur Ingress NGINX particulier, car il existe plusieurs projets. Cet article présente les CVE et explique comment distinguer les différents projets de contrôleurs Ingress afin de dissiper toute confusion.

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX
NGINX | 11/03/2020

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX

Votre API répond-elle aux requêtes en moins de 30 ms ? Si ce n’est pas le cas, il ne s’agit pas d’une API en temps réel offrant la faible latence exigée par la grande majorité des organisations. Mesurez la latence de votre API avec l’outil rtapi de NGINX et découvrez comment NGINX peut l’aider à offrir une réactivité en temps réel.

Un testeur d’expressions régulières pour NGINX et NGINX Plus
NGINX | 11/06/2019

Un testeur d’expressions régulières pour NGINX et NGINX Plus

Le testeur d’expressions régulières (regex) pour NGINX et NGINX Plus vous évite de tâtonner en vous indiquant si une expression régulière utilisée dans un bloc location ou map correspond aux valeurs comme prévu. Il génère la configuration appropriée et affiche les valeurs des groupes de capture.

Caches partagés avec les clusters de cache NGINX Plus, partie 1
NGINX | 24/01/2017

Caches partagés avec les clusters de cache NGINX Plus, partie 1

Optimisez la capacité de votre cache web en le répartissant entre plusieurs serveurs de cache web NGINX ou NGINX Plus. Découvrez comment procéder dans cet article.

Introduction aux microservices
NGINX | 19/05/2015

Introduction aux microservices

Les microservices suscitent actuellement beaucoup d’intérêt. Cet article de blog est le premier d’une série de sept consacrée à la conception, au développement et au déploiement de microservices.