web-dev-qa-db-ja.com

他のサーバーへのProxyPass HTTPS

サーバーfrontend.example.comにパブリックIPがあります。これは、Apache(2.4)がservice1.example.comfrontend.example.comのDNSエイリアス)に送信されるトラフィックをプロキシする必要があるためです。

service1.example.comは、2つの間のプライベートLAN(192.168.56.0)上のVM=です。

これはHTTPにとって簡単です。

<VirtualHost *:80>
        ServerName service1.example.com

        ProxyPass / http://192.168.56.2/
        ProxyPassReverse / http://192.168.56.2/

        <Location "/">
                Require all granted
        </Location>
</VirtualHost>

HTTPSでも同じようにしようとしています。

<VirtualHost *:443>
        ServerName service1.example.com

        SSLEngine On
        SSLProxyEngine On
        ProxyRequests Off
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerExpire off
        SSLInsecureRenegotiation on
        SSLProxyVerify none
        SSLVerifyClient none
        SSLCertificateFile /etc/ssl/certs/example_com.crt
        SSLCertificateKeyFile /etc/ssl/certs/example_com.key

        ProxyPass / https://192.168.56.2/
        ProxyPassReverse / https://192.168.56.2/

        <Location "/">
                Require all granted
        </Location>
</VirtualHost>

HTTPS経由でservice1.example.comにアクセスしようとすると、次が返されます:リモートサーバーとのSSLハンドシェイク中にエラーが発生しました

ここではセキュリティは気になりません。 service1requires一部のサービスへのHTTPS接続。これが、単にHTTPSをHTTPにプロキシしない理由です。 frontend.example.comをSSLに関与させたくありません。私が望んでいることは、「ねえ、私は443に接続があります。私はそれを処理していません。この内部IPに転送するだけです」と言っています。リクエストを渡してもらいたいだけです。それはできますか?

上記のHTTPS設定でわかるように、私はセキュリティをできる限り緩和しようとしました(たとえば、SSLInsecureRenegotiation onは中間者攻撃に対して壁を下げるためだと思いませんか? )。しかし、これまでのところ何も機能していません。

4
cornuz

どうやら私が欠けていた唯一のディレクティブはSSLProxyCheckPeerName off。今では動作します。

2
cornuz