154 votes

Erreur lors de la poignée de main SSL avec le serveur distant

J'ai Apache2 (écoutant sur 443) et une application web fonctionnant sur Tomcat7 (écoutant sur 8443) sur Ubuntu.

J'ai configuré apache2 en tant que proxy inverse pour accéder à l'application web via le port 443 au lieu de 8443. De plus, j'ai besoin d'avoir une communication SSL non seulement entre le navigateur et apache2 mais aussi entre apache2 et tomcat7, j'ai donc configuré SSL à la fois sur apache2 et tomcat7. Si j'essaie d'accéder directement à l'application web de tomcat7, tout se passe bien. Le problème est que lorsque j'essaie d'accéder à l'application web de tomcat à travers apache2 (proxy inverse), une erreur apparaît dans le navigateur :

Erreur du Proxy
Le serveur proxy n'a pas pu gérer la requête GET /web_app.
Raison : Erreur lors de la poignée de main SSL avec le serveur distant

341voto

mydoghasworms Points 6190

Le commentaire de MK m'a mis sur la bonne voie.

Dans le cas d'Apache 2.4 et plus récent, il existe des valeurs par défaut différentes et une nouvelle directive.

Je fais tourner Apache 2.4.6, et j'ai dû ajouter les directives suivantes pour que cela fonctionne :

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

6voto

Rehmat Points 588

J'ai 2 serveurs configurés sur Docker, un reverse proxy et un serveur web. Cette erreur a commencé à se produire pour tous mes sites Web soudainement après 1 an. Lors de la configuration précédente, j'avais généré un certificat auto-signé sur le serveur web.

Donc, j'ai dû générer à nouveau le certificat SSL et cela a commencé à fonctionner...

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl.key -out ssl.crt

4voto

nirmalsingh Points 210

Sur un serveur distant OEL (Oracle Enterprise Linux) 7.8, j'ai une application web backend qui fonctionne avec HTTPS/8009. Comme c'est une application tierce, je n'ai pas eu le choix de désactiver SSL ou de changer de port.

Comme j'avais besoin d'accéder à l'application web depuis le navigateur de ma machine locale, j'ai pensé mettre en place un proxy inverse (mapping HTTP vers HTTPS) en utilisant Apache httpd. Maintenant je peux accéder à l'application web depuis mon navigateur local via l'URL ci-dessous :

http://10.157.146.97:1234/

Pour votre information, les commandes CURL qui fonctionnaient à l'intérieur de la machine Linux étaient les suivantes :

curl http://10.157.146.97:1234/
curl -k https://localhost:8009/

Voici ma configuration de proxy inverse :

/etc/httpd/conf/httpd.conf

Listen 1234

SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPreserveHost On
ProxyPass / https://localhost:8009/
ProxyPassReverse / https://localhost:8009/

Un aspect avec lequel j'ai beaucoup lutté, c'est que j'essayais auparavant avec un motif d'URL (/sample) dans ProxyPass/ProxyPassReverse mais cela causait une erreur HTTP 404 (non trouvé) pour les fichiers css/js car la page d'accueil de l'application web contient des chemins css/js indirects (code d'exemple ci-dessous). Donc remplacer le motif d'URL (/sample) par (/) a également résolu ce problème.

Configuration précédente qui ne fonctionnait pas :
ProxyPass /sample https://localhost:8009/
ProxyPassReverse /sample https://localhost:8009/

2voto

Justas Points 2539

Face au même problème que l'auteur du message initial:

  • Tomcat renvoyait une réponse lors de l'accès direct via SOAP UI
  • Les fichiers html ne se chargeaient pas
  • Lorsque les propriétés Apache mentionnées dans la réponse précédente étaient utilisées, la page web apparaissait mais AngularJS ne pouvait pas obtenir de réponse HTTP

Le certificat SSL de Tomcat était expiré alors qu'un navigateur le montrait comme sécurisé - le certificat d'Apache était loin de l'expiration. La mise à jour du fichier KeyStore de Tomcat a résolu le problème.

2voto

user465139 Points 727

Voici ma variation sur ce thème, inspirée par ce Gist Git. Le serveur est un conteneur Docker avec un certificat SSL interne auto-signé, accessible à l'adresse https://localhost:8443. Proxifié vers server.example.org:443. Détails de configuration pertinents :

    ServerName server.example.org

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # Ces paramètres sont certainement nécessaires
    SSLEngine On
    SSLProxyEngine On
    ProxyRequests Off
    SSLProxyVerify none 
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    # Ceux-ci peuvent ne pas être nécessaires, en fonction de l'application proxifiée
    ProxyPreserveHost on
    RequestHeader set X-Forwarded-Proto https

    ProxyPass "/" "https://localhost:8443/"
    RewriteEngine on
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/?(.*) "wss://localhost:8443/$1" [P,L]
    ProxyPassReverse "/" "https://localhost:8443/"

La section entre les balises SSLEngine On et RequestHeader... a été assemblée en faisant des recherches sur Google et en faisant des essais. Il se peut que certains de ces réglages ne soient pas nécessaires, à vous de voir.

Remarque : la balise RewriteRule avec "wss" était nécessaire car le serveur utilise des websockets sécurisés.

Plateforme : Ubuntu 20.04.3 LTS, Apache 2.4.41.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X