サーバーfrontend.example.com
にパブリックIPがあります。これは、Apache(2.4)がservice1.example.com
(frontend.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ハンドシェイク中にエラーが発生しました
ここではセキュリティは気になりません。 service1
requires一部のサービスへのHTTPS接続。これが、単にHTTPSをHTTPにプロキシしない理由です。 frontend.example.com
をSSLに関与させたくありません。私が望んでいることは、「ねえ、私は443に接続があります。私はそれを処理していません。この内部IPに転送するだけです」と言っています。リクエストを渡してもらいたいだけです。それはできますか?
上記のHTTPS設定でわかるように、私はセキュリティをできる限り緩和しようとしました(たとえば、SSLInsecureRenegotiation on
は中間者攻撃に対して壁を下げるためだと思いませんか? )。しかし、これまでのところ何も機能していません。
どうやら私が欠けていた唯一のディレクティブはSSLProxyCheckPeerName off
。今では動作します。