การใช้ Https ระหว่าง Apache Loadbalancer กับแบ็กเอนด์


30

ฉันใช้เซิร์ฟเวอร์ apache (2.4) ที่กำหนดค่าเป็น loadbalancer หน้าเซิร์ฟเวอร์ apache 2 ตัว มันทำงานได้ดีเมื่อฉันใช้การเชื่อมต่อ http ระหว่าง loadbalancer และแบ็กเอนด์อย่างไรก็ตามการใช้ https ไม่ทำงาน การกำหนดค่าของ 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

แบ็กเอนด์มีใบรับรองที่ลงชื่อด้วยตนเองเท่านั้นในตอนนี้ซึ่งเป็นสาเหตุที่การตรวจสอบใบรับรองถูกปิดใช้งาน

บันทึกข้อผิดพลาดบน loadbalancer มีดังต่อไปนี้:

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

หน้าข้อผิดพลาดในเบราว์เซอร์ประกอบด้วย:

Proxy Error

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

ตามที่ฉันได้กล่าวไปแล้วการเปลี่ยนการกำหนดค่าโปรโตคอล http และพอร์ต 80 ทำงาน การเชื่อมต่อ https ระหว่างไคลเอนต์และ loadbalancer ยังทำงานดังนั้นโมดูล ssl ของ loadbalancer ดูเหมือนว่าจะตั้งค่าอย่างถูกต้อง การเชื่อมต่อโดยตรงกับส่วนหลังผ่าน https ยังไม่ได้ให้ข้อผิดพลาดใด ๆ

ขอบคุณล่วงหน้าสำหรับเวลาของคุณ


แก้ไข: ฉันคิดออกปัญหาคือว่าชื่อสามัญใบรับรองของฉันไม่ตรงกับชื่อเซิร์ฟเวอร์ ฉันคิดว่าSSLProxyVerifyจะไม่มีใครทำให้เกิดความไม่ตรงกันนี้ แต่จะไม่ถูกต้อง ก่อนที่จะ apache 2.4.5 การตรวจสอบนี้สามารถปิดการใช้งานโดยใช้SSLProxyCheckPeerCN offแต่ในรุ่นที่สูงกว่า (ฉันใช้ 2.4.7) SSLProxyCheckPeerName ปิดยังต้องระบุ

เอกสาร Apache สำหรับ sslproxycheckpeername

การกำหนดค่าการทำงานมีลักษณะดังนี้:

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

น่าเสียดายที่ฉันไม่สามารถตอบคำถามของตัวเองเนื่องจากขาดชื่อเสียงดังนั้นฉันจึงแก้ไขคำถามของฉันฉันหวังว่าสิ่งนี้จะช่วยให้ทุกคนที่พบปัญหาที่คล้ายกัน


น่าสนใจ ฉันเคยทำสิ่งนี้กับ apache2.2 และไม่เคยมี SSLProxyVerify เลยและไม่เคยมีปัญหากับการลงชื่อเข้าใช้ด้วยตนเอง คุณแน่ใจหรือว่าเซิร์ฟเวอร์แบ็คเอนด์นั้นใช้ได้
ETL

@ETL ฉันไม่ทราบว่าจำเป็นต้องใช้ "SSLProxyVerify none" หรือไม่ฉันเพิ่งเพิ่มเข้าไปโดยหวังว่าจะสามารถแก้ปัญหาได้ การเรียก "wget ​​https: // [backend1] /test/test.jsp - no-check-certificate" บนเซิร์ฟเวอร์ load-balancer ดาวน์โหลดไฟล์ที่ต้องการ ng
user3240383

คำตอบ:


16

ปัญหากลายเป็นว่าชื่อสามัญใบรับรองไม่ตรงกับชื่อเซิร์ฟเวอร์

ก่อนหน้า Apache 2.4.5 การตรวจสอบนี้สามารถปิดการใช้งานได้SSLProxyCheckPeerCN offแต่SSLProxyCheckPeerName offต้องมีการระบุในเวอร์ชันที่สูงกว่า (เช่น 2.4.7)

เอกสาร Apache สำหรับ SSLProxyCheckPeerName

การกำหนดค่าการทำงานมีลักษณะดังนี้:

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

คุณสามารถตรวจสอบเวอร์ชั่นของ Apache ที่คุณมี :

apachectrl -V

สวัสดีฉันมีปัญหาเดียวกันแน่นอนยกเว้นการกำหนดค่าแตกต่างกันเล็กน้อย: <Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>การตั้งค่าเดียวกันไม่ทำงาน ความคิดใด ๆ
user157735

0

การเพิ่มด้านล่างแก้ปัญหาได้

SSLProxyProtocol +TLSv1

5
การให้ตัวอย่างการตั้งค่าที่ลึกลับนั้นไม่ใช่คำตอบที่มีคุณภาพ สตริงการคัดลอกวางจากอินเทอร์เน็ตไม่ใช่สิ่งที่ผู้ดูแลระบบมืออาชีพทำ อธิบายว่ามันทำอะไรและทำไม
peterh กล่าวว่าคืนสถานะโมนิก้า

วิ่งเข้าไปในนี้ด้วย java12 - เหนือสิ่งอื่นนี้แก้ปัญหาของฉัน ....
womd

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.