Hai bisogno di aiuto per la risoluzione degli errori del server web Https - Stretta di mano SSL non riuscita


9

Ho seguito questa guida: http://hints.macworld.com/article.php?story=20041129143420344

Ecco la mia definizione di host virtuale

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

E quando provo a connettermi a sevre viov il browser web, ottengo questo errore:

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

come posso eseguire il debug / risolvere questo problema?

Risposte:


12

Per aggiungere alla risposta di vbartoni, sembra che da Apache 2.4 in poi ci siano impostazioni predefinite diverse e una nuova direttiva.

Sto eseguendo Apache 2.4.6 e ho dovuto aggiungere le seguenti direttive per farlo funzionare:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

1
Questo fa il lavoro - solo con tutte quelle direttive non si lamenterà.
Michael Böckling,

@ MichaelBöckling Grazie per avermi sollevato. Voglio sottolineare specificamente che la documentazione afferma che SSLProxyCheckPeerNamesostituisce SSLProxyCheckPeerCNma non funzionerà se non si specificano tutte le direttive.
dualizzato il

3

Non preoccuparti di HTTPS tra il tuo front-end e il tuo server back-end, non ha molto senso abilitare SSL per una localhostconnessione.

Per chiarire, utilizzare ProxyPass / http://localhost:3002/invece diProxyPass / https://localhost:3002/


In alternativa, se vuoi davvero connettere il tuo proxy inverso al server back-end usando anche SSL (utile soprattutto quando quel server non è dove si trova il proxy inverso Apache Httpd), inoltre https://backend-server-address, usa le SSLProxy*direttive per impostare il Certificati CA, come documentato nell'introduzione alla mod_proxydocumentazione . In particolare, è necessario configurare SSLProxyCACertificateFilee assicurarsi che il certificato del server back-end sia emesso con il nome host corretto, come visto da Apache Httpd (vale localhosta dire nel proprio caso).


Se non ti stai collegando al tuo server back-end usando SSL, potrebbe non riuscire a rilevare che stai effettivamente utilizzando SSL ed essere configurato per forzarti ad andare su SSL (da qui gli infiniti reindirizzamenti). Potresti voler esaminare meccanismi simili a quello che fa Jetty con la sua forwardedopzione (per essere in grado di dire al back-end che è dietro un proxy). Rails potrebbe essere in grado di interpretare X-Forwarded-Protoper impostazione predefinita. In questo caso, aggiungilo alla tua configurazione di Apache (nell'host virtuale SSL):

RequestHeader set X-Forwarded-Proto 'https'

Sembra esserci un problema simile discusso qui , per esempio.


SSLProxy è menzionato solo una volta su quel link. Nessun esempio su come usarlo. Ho cambiato l'intestazione della richiesta per essere impostato su X-Forwarded-Proto 'https' ... ma continua a non funzionare / Ottengo lo stesso errore. Andando su localhost: 3002 dà anche lo stesso errore
NullVoxPopuli

Esistono validi motivi per connettersi a https con localhost: esempio socket.io in un back-end HTTPS. Lo farà attraverso errori con contenuto misto.
Florestan06,

3

Ho avuto un problema simile (gli stessi log degli errori), tranne per il fatto che il proxy stava inoltrando il traffico https a un altro host.
Poiché ero pigro e gli host erano nella mia rete isolata, queste direttive hanno risolto il problema:

SSLProxyVerify none
SSLProxyCheckPeerCN off


1

Se il server back-end utilizza un certificato autofirmato obsoleto, è necessaria un'ulteriore opzione (se non è possibile accedere al server back-end):

SSLProxyCheckPeerExpire off

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.