Butuh bantuan memecahkan masalah kesalahan Https webserver - Handshake SSL gagal

9

Saya mengikuti panduan ini: http://hints.macworld.com/article.php?story=20041129143420344

Inilah definisi host virtual saya

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

Dan ketika saya mencoba menghubungkan ke sevre viov browser web, saya mendapatkan kesalahan ini:

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

bagaimana cara saya debug / perbaiki ini?

NullVoxPopuli
sumber

Jawaban:

12

Untuk menambah jawaban vbartoni, tampaknya dari Apache 2.4 ke atas, ada berbagai standar dan arahan baru.

Saya menjalankan Apache 2.4.6, dan saya harus menambahkan arahan berikut untuk membuatnya berfungsi:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
mydoghasworms
sumber
1
Itu berhasil - hanya dengan semua arahan itu tidak akan mengeluh.
Michael Böckling
@ MichaelBöckling Terima kasih yang menahan saya. Saya ingin menunjukkan secara spesifik bahwa dokumentasi menyatakan bahwa SSLProxyCheckPeerNamemenggantikan SSLProxyCheckPeerCNtetapi tidak akan berfungsi kecuali jika Anda menentukan semua arahan.
digandakan
3

Jangan repot-repot dengan HTTPS antara front-end Anda dan server back-end Anda, ada sedikit gunanya mengaktifkan SSL untuk localhostkoneksi.

Untuk memperjelas, gunakan ProxyPass / http://localhost:3002/sebagai gantiProxyPass / https://localhost:3002/


Atau, jika Anda benar-benar ingin menghubungkan proxy terbalik Anda ke server back-end menggunakan SSL juga (sebagian besar berguna ketika server itu tidak di mana proxy reverse Apache Httpd), di samping itu https://backend-server-address, gunakan SSLProxy*arahan untuk mengatur Sertifikat CA, seperti yang didokumentasikan dalam pengantar mod_proxydokumentasi . Secara khusus, Anda perlu mengkonfigurasi SSLProxyCACertificateFiledan memastikan sertifikat server backend dikeluarkan ke nama host yang tepat seperti yang terlihat oleh Apache Httpd (yaitu localhostdalam kasus Anda).


Jika Anda tidak terhubung ke server back-end Anda menggunakan SSL, mungkin gagal mendeteksi Anda benar-benar menggunakan SSL dan dikonfigurasikan untuk memaksa Anda pergi ke SSL (karenanya pengalihan tidak terbatas). Anda mungkin ingin melihat mekanisme yang sama seperti apa yang Jetty lakukan dengan forwardedopsinya (untuk dapat mengatakan back-end itu di belakang proxy). Rails mungkin dapat menafsirkannya X-Forwarded-Protosecara default. Dalam hal ini, tambahkan ini ke konfigurasi Apache Anda (di host virtual SSL):

RequestHeader set X-Forwarded-Proto 'https'

Tampaknya ada masalah serupa yang dibahas di sini , misalnya.

Bruno
sumber
SSLProxy hanya disebutkan satu kali di tautan itu. Tidak ada contoh cara menggunakannya. Saya mengubah header permintaan menjadi X-Forwarded-Proto 'https' ... tetapi tetap tidak berfungsi / saya mendapatkan kesalahan yang sama. Pergi ke localhost: 3002 juga memberikan kesalahan yang sama
NullVoxPopuli
Ada alasan yang sah untuk menghubungkan ke https dengan localhost: contoh socket.io di back-end HTTPS. Itu akan melalui kesalahan dengan konten campuran.
Florestan06
3

Saya memiliki masalah yang sama (log kesalahan yang sama), kecuali bahwa proxy itu meneruskan lalu lintas https ke host lain.
Karena saya malas dan host berada di jaringan saya sendiri yang terisolasi, arahan ini menyelesaikan masalah:

SSLProxyVerifikasi tidak ada
SSLProxyCheckPeerCN off

vbartoni
sumber
1

Jika server backend menggunakan sertifikat yang ditandatangani sendiri yang sudah kedaluwarsa, satu opsi lagi diperlukan (jika tidak ada akses ke server backend):

SSLProxyCheckPeerExpire mati

Milan Kerslager
sumber