Apache Loadbalancerとバックエンドの間でHttpsを使用する


30

2台のapacheサーバーの前にロードバランサーとして構成されたapache(2.4)サーバーを使用しています。ロードバランサーとバックエンドの間でhttp接続を使用すると正常に機能しますが、httpsを使用しても機能しません。ロードバランサーの構成:

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

現在のところ、バックエンドには自己署名証明書しかありません。そのため、証明書の検証は無効になっています。

ロードバランサーのエラーログには次が含まれます。

[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接続も機能するため、ロードバランサーのsslモジュールが適切にセットアップされているようです。httpsを介してバックエンドに直接接続しても、エラーは発生しません。

お時間をいただきありがとうございます


編集:私はそれを考え出した、問題は私の証明書の共通名がサーバー名と一致しないことです。SSLProxyVerify noneは、この不一致を無視すると考えていましたが、無視しませんでした。Apache 2.4.5より前は、SSLProxyCheckPeerCN offを使用してこのチェックを無効にできますが、上位バージョン(2.4.7を使用ています)ではSSLProxyCheckPeerName offも指定する必要があります。

sslproxycheckpeernameのApacheドキュメント

作業構成は次のようになります。

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 14

@ETL「SSLProxyVerify none」が必要かどうかはわかりませんが、問題が解決することを期待して追加しました。ロードバランサーサーバーで「wget https:// [backend1] /test/test.jsp --no-check-certificate」を呼び出すと、予想されるファイルがダウンロードされます。ng
user3240383 14

回答:


16

問題は、証明書の共通名がサーバー名と一致しないことでした。

Apache 2.4.5より前では、このチェックはを使用して無効にできますSSLProxyCheckPeerCN offが、より高いバージョン(2.4.7など)SSLProxyCheckPeerName offでも指定する必要があります。

の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
神秘的な設定サンプルを提供することは、質の高い答えではありません。インターネットから文字列をコピーして貼り付けることは、プロのシステム管理者が行うことではありません。それ、それが何をするのか、そしてなぜを説明する。
ペテルは、モニカを

java12とこのに走った-とりわけ、これは....私の問題を解決
womd

-2

私はApache 2.4.9を使用し、httpd-ssl.confに次のコードを追加します

SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1

私は問題を解決しました


3
POODLEを聞いたことがありますか?SSLv3を無効にする必要があります。
スヴェン

2
SSLv3は脆弱です
インサイダー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.