私のWebサーバーは、ファイアウォールの背後にあるサードパーティのサーバーと統合する必要があります。ファイアウォールを通過するには、すべてのリクエストが同じIPアドレスから送信され、SSL経由で認証される必要があります。そこで、プロキシとして機能するはずのマシンをセットアップし、すべてのトラフィックをSSL経由でサードパーティのサーバーに転送します。
証明書と一致するキーファイルを使用してプロキシを設定し、証明書とキーファイルを使用して、CURL経由でサードパーティサービスに正常にリクエストを送信できます。これらのリクエストを通過させるために、Apacheの仮想ホストを増強しましたが、リモートサーバーとのSSLハンドシェイクが失敗したというエラーが表示され続けます。 Apacheログに次のエラーメッセージが表示されます。
プロキシクライアント証明書コールバック:(:443)ダウンストリームサーバーはクライアント証明書を要求しましたが、構成されていません[Sun Jul 29 01:40:48 2012] [エラー](502)不明なエラー502:プロキシ:パスリクエストの本文が<サードパーティIP >:18443(<サードパーティのURL>)
[Sun Jul 29 01:40:48 2012] [error] [client] proxy:Error in SSL Handshake with remote server returned by /
私のApache仮想ホスト構成は次のようになります。
<VirtualHost *:18443>
ServerName <Proxy IP>
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/Apache2/ssl/my_server.pem
SSLCertificateKeyFile /etc/Apache2/ssl/my_server.key
SSLProxyCACertificatePath /etc/ssl/certs
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://<3rd party server address>:18443
ProxyPassReverse / https://<3rd party server address>:18443
</VirtualHost>
ありがとうございました!どんな助けでも大歓迎です!
その証明書ファイルをプロキシバックエンドへの認証メカニズムとして使用するようにApacheを設定する必要があります。
.pem
および.key
を1つのファイルに入れ、次のように指定します。
SSLProxyMachineCertificateFile /path/to/combined.pem
彼が本当に求めているのは、SSL要求をエンドポイントサーバー(おそらくアプリケーションサーバー)にプロキシし、SSLクライアント証明書認証を行うApacheです...
この場合、SSLProxyMachineCertificateFileは役に立ちません。このファイルには、Apacheサーバーがアプリケーションサーバーで自分自身を認証するための証明書が含まれているためです。これは望ましくありません。呼び出し側のクライアントが自分の証明書を使用する必要があります。
おそらく、Apacheが取得した証明書情報をアプリサーバーに渡すことができるはずです。 AJP経由ですが、これまでのところ、これを機能させることはできません。私はそれが機能するようになったら、私はこの答えを試して更新します...
同じエラーがありました。現在のProxyPass
ディレクティブと一致しない構成済みのピア名に問題がある可能性があります。事実、私はlocalhostでサービスにアクセスします。次の設定行は私のために働きました:
_SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
ProxyPass "/api/" "https://localhost:18443/api/"
_
しかし、メッセージProxy client certificate callback: (:443) downstream server wanted client certificate but none are configured
はまだエラーログにありますが、リクエストは機能しています。