22

背景情報: (下部の質問)

クライアントに接続しようとしています。このクライアントには 8 台のサーバーがあり、そのすべてに一意の IP アドレスがあります。クライアントは、すべてのサーバーで同じ SSL 証明書を使用します (この例では、証明書名 == www.all_servers.com)。クライアントは、https 経由の着信要求のみを許可します。

mod_proxy を使用して、異なる URI マッピングを異なるサーバーにマップする Apache プロキシを作成しようとしています。例えば:

https://PROXY_SERVER/SERVER1/{REQUEST}

これにより、{REQUEST} が server1 に送信されます

https://PROXY_SERVER/SERVER2/{REQUEST}

{REQUEST} を server2 に送信します。これまでのところ、かなり単純です。

Apache 2.2 では、次のように IP アドレスを使用してこれを実現できました。

SSLProxyEngine On

ProxyPass /server1 https://1.1.1.1/
ProxyPassReverse /server1 https://1.1.1.1/

ProxyPass /server2 https://1.1.1.2/
ProxyPassReverse /server2 https://1.1.1.2/

これは、証明書が一致するかどうかを Apache 2.2 がチェックしていないことが原因でした (1.1.1.1 != www.all_servers.com)。

ただし、Apache 2.4 では、証明書の問題が発生しています (当然のことです)。(この正確なコードは apache 2.2 ボックスで動作します)

[Thu Oct 10 12:01:48.571246 2013] [proxy:error] [pid 13282:tid 140475667224320] (502)Unknown error 502: [client 192.168.1.1:48967] AH01084: pass request body failed to 1.1.1.1:443 (1.1.1.1)
[Thu Oct 10 12:01:48.571341 2013] [proxy:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH00898: Error during SSL Handshake with remote server returned by /server1/asd
[Thu Oct 10 12:01:48.571354 2013] [proxy_http:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH01097: pass request body failed to 1.1.1.1:443 (1.1.1.1) from 192.168.1.1 ()

次を使用して1つのサーバーが機能するため、/ etc/hostsを使用できません。

1.1.1.1 www.all_servers.com

SSLProxyEngine On
ProxyPass /server1 https://www.all_servers.com/
ProxyPassReverse /server1 https://www.all_servers.com/

しかし、多くのサーバーはそうではありません


だから、実際の質問に:

mod_proxy に不一致の証明書を強制的に無視させる方法はありますか? または、これを行うためのより良い方法はありますか。

これについて助けてくれてありがとう!

4

1 に答える 1

25

SSLProxy*Apache サーバー (リバース プロキシ接続に関する限りクライアント) でオプションを設定できます。

これはSSLProxyCheckPeerCN(2.2 ではデフォルトでオフ、2.4 ではデ​​フォルトでオン) で行われましたが、これが IP アドレスでどのように機能するかはわかりません (CN に IP アドレスを持つことは標準ではないため)。Apache Httpd 2.4 には、SAN をチェックするための新しいオプションがあります ( SSLProxyCheckPeerName) が、IP アドレスに対してどのように動作するかはわかりません。

DNS SAN 拡張または CNに IP アドレスを持つことは、 HTTPSの標準に準拠していません。

タイプ dNSName の subjectAltName 拡張が存在する場合、それを ID として使用する必要があります。それ以外の場合は、証明書の Subject フィールドの (最も具体的な) Common Name フィールドを使用する必要があります。Common Name の使用は既存の慣行ですが、推奨されておらず、証明機関は代わりに dNSName を使用することをお勧めします。

[...]

場合によっては、URI がホスト名ではなく IP アドレスとして指定されます。この場合、iPAddress subjectAltName が証明書に存在し、URI の IP と正確に一致する必要があります。

于 2013-10-10T11:52:06.823 に答える