Menggunakan Https antara Apache Loadbalancer dan backends

30

Saya menggunakan server apache (2.4) yang dikonfigurasi sebagai loadbalancer di depan 2 server apache. Ini berfungsi dengan baik ketika saya menggunakan koneksi http antara loadbalancer dan backends, namun menggunakan https tidak berfungsi. Konfigurasi loadbalancer:

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
  BalancerMember https://[Backend1]:443/test
  BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster

Backends hanya memiliki sertifikat yang ditandatangani sendiri untuk saat ini, itulah sebabnya mengapa verifikasi sertifikat dinonaktifkan.

Log kesalahan pada loadbalancer berisi yang berikut ini:

[proxy:error] [pid 31202:tid 140325875570432] (502)Unknown error 502: [client ...] AH01084: pass request body failed to [Backend1]:443 ([Backend1])
[proxy:error] [pid 31202:tid 140325875570432] [client ...] AH00898: Error during SSL Handshake with remote server returned by /test/test.jsp
[proxy_http:error] [pid 31202:tid 140325875570432] [client ...] AH01097: pass request body failed to [Backend1]:443 ([Backend1]) from [...] ()

Halaman kesalahan di browser berisi:

Proxy Error

The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server

Seperti yang telah saya katakan di atas mengubah konfigurasi ke protokol http dan port 80 berfungsi. Juga https koneksi antara klien dan loadbalancer berfungsi, sehingga modul ssl loadbalancer tampaknya diatur dengan benar. Menghubungkan langsung ke backend melalui https juga tidak menghasilkan kesalahan.

Terima kasih sebelumnya atas waktu Anda


Sunting: Saya menemukan jawabannya, masalahnya adalah bahwa nama umum sertifikat saya tidak cocok dengan nama server. Saya pikir tidak ada SSLProxyVerify akan menyebabkan ketidakcocokan ini diabaikan, tetapi tidak. Sebelum apache 2.4.5 cek ini dapat dinonaktifkan menggunakan SSLProxyCheckPeerCN off tetapi pada versi yang lebih tinggi (saya menggunakan 2.4.7) SSLProxyCheckPeerName off juga perlu ditentukan.

Dokumentasi Apache untuk sslproxycheckpeername

Konfigurasi kerja terlihat seperti ini:

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

<Proxy balancer://testcluster>
  BalancerMember https://[backend1]:443/test
  BalancerMember https://[backend1]:443/test
</Proxy>
ProxyPass /test balancer://testcluster

Sayangnya saya tidak dapat menjawab pertanyaan saya sendiri karena kurangnya reputasi, jadi saya mengedit pertanyaan saya, saya harap ini membantu siapa saja yang mengalami masalah serupa

pengguna3240383
sumber
Menarik. Saya biasa melakukan ini dengan apache2.2 dan tidak pernah jadi SSLProxyVerify tidak ada dan tidak pernah punya masalah dengan sertifikat tanda tangan. Anda yakin server backend baik-baik saja.
ETL
@ ET Saya tidak tahu apakah "SSLProxyVerify none" diperlukan atau tidak, saya baru saja menambahkan bahwa dengan harapan hal itu dapat memperbaiki masalah. Memanggil "wget ​​https: // [backend1] /test/test.jsp --tidak-periksa-sertifikat" pada server load-balancer mengunduh file yang diharapkan. ng
user3240383

Jawaban:

16

Masalahnya ternyata adalah bahwa nama umum sertifikat tidak cocok dengan nama server.

Sebelum Apache 2.4.5 pemeriksaan ini dapat dinonaktifkan menggunakan SSLProxyCheckPeerCN offtetapi pada versi yang lebih tinggi (seperti 2.4.7) SSLProxyCheckPeerName offjuga perlu ditentukan.

Dokumentasi Apache untuk SSLProxyCheckPeerName

Konfigurasi kerja terlihat seperti ini:

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

<Proxy balancer://testcluster>
  BalancerMember https://[backend1]:443/test
  BalancerMember https://[backend1]:443/test
</Proxy>
ProxyPass /test balancer://testcluster

Anda dapat memeriksa versi Apache yang Anda miliki dengan:

apachectrl -V
ETL
sumber
Hai saya punya masalah yang sama persis kecuali konfigurasi sedikit berbeda: <Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>Pengaturan yang sama tidak berfungsi. Ada ide?
user157735
0

Menambahkan di bawah ini menyelesaikan masalah

SSLProxyProtocol +TLSv1
Murryy
sumber
5
Memberikan sampel konfigurasi mistis bukanlah jawaban yang berkualitas baik. Menyalin-menempelkan string dari internet bukan apa yang administrator sistem profesional lakukan. Jelaskan, apa fungsinya, dan mengapa.
peterh mengatakan mengembalikan Monica
berlari ke ini dengan java12 - antara lain, ini memecahkan masalah saya ....
womd
-2

saya menggunakan apache 2.4.9 dan menambahkan ke httpd-ssl.conf kode berikut

SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1

Saya telah memecahkan masalah

nutria
sumber
3
Pernah mendengar tentang POODLE ? SSLv3 harus dinonaktifkan.
Sven
2
SSLv3 rentan
insider