Besoin d'aide pour résoudre l'erreur du serveur Web Https - Échec de la prise de contact SSL

9

J'ai suivi ce guide: http://hints.macworld.com/article.php?story=20041129143420344

Voici ma définition d'hôte virtuel

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
    CacheDisable *
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    DocumentRoot "/Users/me/projects/myproject/public"
    ServerName ssl.mydomain.com
    ServerAlias *.ssl.mydomain.com
    SSLCertificateKeyFile "/private/etc/apache2/certs/webserver.nopass.key"
    SSLCertificateFile "/private/etc/apache2/certs/newcert.pem"
    SSLCACertificateFile "/private/etc/apache2/certs/demoCA/cacert.pem"
    SSLCARevocationPath "/private/etc/apache2/certs/demoCA/crl"
    ErrorLog "/Users/me/Desktop/ssl.log"

    ProxyPass / https://localhost:3002/
    ProxyPassReverse / https://localhost:3002
    ProxyPreserveHost on    
</VirtualHost>

Et lorsque j'essaie de me connecter au sevre viov du navigateur Web, j'obtiens cette erreur:

[Thu Feb 02 16:50:40 2012] [error] (502)Unknown error: 502: proxy: pass request body failed to 127.0.0.1:3002 (localhost)
[Thu Feb 02 16:50:40 2012] [error] [client 96.11.81.39] proxy: Error during SSL Handshake with remote server returned by /session/new
[Thu Feb 02 16:50:40 2012] [error] proxy: pass request body failed to 127.0.0.1:3002 (localhost) from 96.11.81.39 ()

comment déboguer / corriger cela?

NullVoxPopuli
la source

Réponses:

12

Pour ajouter à la réponse de vbartoni, il semble qu'à partir d'Apache 2.4 et versions ultérieures, il existe différentes valeurs par défaut et une nouvelle directive.

J'utilise Apache 2.4.6 et j'ai dû ajouter les directives suivantes pour le faire fonctionner:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
mydoghasworms
la source
1
Cela fait l'affaire - seulement avec toutes ces directives, ça ne va pas se plaindre.
Michael Böckling du
@ MichaelBöckling Merci qui m'a soutenu. Je tiens à souligner spécifiquement que la documentation indique que SSLProxyCheckPeerNameremplace, SSLProxyCheckPeerCNmais cela ne fonctionnera que si vous spécifiez toutes les directives.
double
3

Ne vous embêtez pas avec HTTPS entre votre serveur frontal et votre serveur principal, il est inutile d'activer SSL pour une localhostconnexion.

Pour clarifier, utilisez ProxyPass / http://localhost:3002/au lieu deProxyPass / https://localhost:3002/


Alternativement, si vous voulez vraiment connecter votre proxy inverse au serveur principal à l'aide de SSL également (surtout utile lorsque ce serveur n'est pas là où se trouve le proxy inverse Apache Httpd), en plus de https://backend-server-address, utilisez les SSLProxy*directives pour configurer le Certificats CA, comme indiqué dans l'introduction de la mod_proxydocumentation . En particulier, vous devrez configurer SSLProxyCACertificateFileet vous assurer que le certificat du serveur d'arrière-plan est émis avec le bon nom d'hôte tel que vu par Apache Httpd (c'est- localhostà- dire dans votre cas).


Si vous ne vous connectez pas à votre serveur principal à l'aide de SSL, il peut ne pas détecter que vous utilisez réellement SSL et être configuré pour vous forcer à passer à SSL (d'où les redirections infinies). Vous voudrez peut-être regarder des mécanismes similaires à ce que Jetty fait avec son forwardedoption (pour pouvoir dire au back-end qu'il est derrière un proxy). Les rails peuvent être en mesure d'interpréter le X-Forwarded-Protopar défaut. Dans ce cas, ajoutez ceci à votre configuration Apache (dans l'hôte virtuel SSL):

RequestHeader set X-Forwarded-Proto 'https'

Il semble y avoir un problème similaire discuté ici , par exemple.

Bruno
la source
SSLProxy n'est mentionné qu'une seule fois sur ce lien. Aucun exemple d'utilisation. J'ai changé l'en-tête de demande pour qu'il soit défini X-Forwarded-Proto 'https' ... mais cela ne fonctionne toujours pas / j'obtiens la même erreur. Aller à localhost: 3002 donne également la même erreur
NullVoxPopuli
Il existe des raisons valables de se connecter à https avec localhost: exemple socket.io dans un back-end HTTPS. Cela passera par des erreurs avec un contenu mixte.
Florestan06
3

J'ai eu un problème similaire (les mêmes journaux d'erreurs), sauf que le proxy transférait le trafic https vers un autre hôte.
Étant donné que j'étais paresseux et que les hôtes se trouvent dans mon propre réseau isolé, ces directives ont résolu le problème:

SSLProxyVerify none
SSLProxyCheckPeerCN off

vbartoni
la source
1

Si le serveur principal utilise un certificat auto-signé obsolète, une option supplémentaire est nécessaire (s'il n'y a pas d'accès au serveur principal):

SSLProxyCheckPeerExpire désactivé

Milan Kerslager
la source