¿Necesita ayuda para solucionar el error del servidor web Https? Error en el protocolo de enlace SSL

9

Seguí esta guía: http://hints.macworld.com/article.php?story=20041129143420344

Aquí está mi definición de host virtual

<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>

Y cuando intento conectarme al servidor web, aparece este error:

[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 ()

¿Cómo depuro / soluciono esto?

NullVoxPopuli
fuente

Respuestas:

12

Para agregar a la respuesta de vbartoni, parece que desde Apache 2.4 en adelante, hay diferentes valores predeterminados y una nueva directiva.

Estoy ejecutando Apache 2.4.6, y tuve que agregar las siguientes directivas para que funcione:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
mydoghasworms
fuente
1
Eso hace el trabajo, solo con todas esas directivas no se quejará.
Michael Böckling
@ MichaelBöckling Gracias por detenerme. Quiero señalar específicamente que la documentación indica que SSLProxyCheckPeerNamereemplaza SSLProxyCheckPeerCNpero no funcionará a menos que especifique todas las directivas.
Dualed
3

No se moleste con HTTPS entre su servidor front-end y su servidor back-end, no tiene mucho sentido habilitar SSL para una localhostconexión.

Para aclarar, use en ProxyPass / http://localhost:3002/lugar deProxyPass / https://localhost:3002/


Alternativamente, si realmente desea conectar su proxy inverso al servidor de fondo utilizando SSL también (sobre todo útil cuando ese servidor no está donde está el proxy inverso Apache Httpd), además de https://backend-server-address, use las SSLProxy*directivas para configurar el Certificados de CA, como se documenta en la introducción a la mod_proxydocumentación . En particular, deberá configurar SSLProxyCACertificateFiley asegurarse de que el certificado del servidor de fondo se emita con el nombre de host correcto como lo ve Apache Httpd (es decir, localhosten su caso).


Si no se está conectando a su servidor back-end utilizando SSL, es posible que no detecte que realmente está utilizando SSL y esté configurado para obligarlo a ir a SSL (de ahí las redirecciones infinitas). Es posible que desee ver mecanismos similares a los que hace Jetty con su forwardedopción (para poder decirle al back-end que está detrás de un proxy). Los rieles pueden ser capaces de interpretar X-Forwarded-Protopor defecto. En este caso, agregue esto a su configuración de Apache (en el host virtual SSL):

RequestHeader set X-Forwarded-Proto 'https'

Parece que hay un problema similar discutido aquí , por ejemplo.

Bruno
fuente
SSLProxy solo se menciona una vez en ese enlace. No hay ejemplos de cómo usarlo. Cambié el encabezado de la solicitud para configurar X-Fordered-Proto 'https' ... pero aún no funciona / me sale el mismo error. Ir a localhost: 3002 también da el mismo error
NullVoxPopuli
Hay razones válidas para conectarse a https con localhost: ejemplo socket.io en un back-end HTTPS. Será a través de errores con contenido mixto.
Florestan06
3

Tuve un problema similar (los mismos registros de error), excepto que el proxy estaba reenviando el tráfico https a otro host.
Como era flojo y los hosts están en mi propia red aislada, estas directivas resolvieron el problema:

SSLProxyVerify none
SSLProxyCheckPeerCN off

vbartoni
fuente
1

Si el servidor de fondo utiliza un certificado autofirmado desactualizado, se necesita una opción más (si no hay acceso al servidor de fondo):

SSLProxyCheckPeerExpire off

Milan Kerslager
fuente