我的Web服务器需要与位于防火墙后面的第三方服务器集成。 为了通过防火墙,所有的请求必须来自同一个IP地址,并通过SSLauthentication。 因此,我build立了一台应该作为代理的机器,并通过SSL将所有stream量转发到第三方服务器。
我使用证书和密钥文件设置了代理,并且可以通过CURL成功地请求第三方服务,使用证书和密钥文件。 我在Apache上安装了一个虚拟主机来传递这些请求,但不断收到错误,说明与远程服务器的SSL握手失败。 我在我的apache日志中看到以下错误消息:
代理客户端证书callback:(:443)下游服务器想要客户端证书,但没有configuration[Sun Jul 29 01:40:48 2012] [error](502)未知错误502:proxy:通过请求主体未能<第三方IP >:18443(<第三方url)
[Sun Jul 29 01:40:48 2012] [error] [client] proxy:SSL握手过程中出错,远程服务器返回/
我的apache虚拟主机configuration如下所示:
<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>
谢谢! 任何帮助,高度赞赏!
您需要将Apacheconfiguration为使用该证书文件作为其代理后端的身份validation机制。
将.pem和.key合并成一个文件,然后用下面的方法指出:
SSLProxyMachineCertificateFile /path/to/combined.pem
Imho他真正要求的是一个Apache,它将SSL请求代理到一个端点服务器,可能是一个应用服务器,它执行SSL客户端证书authentication。
在这种情况下,SSLProxyMachineCertificateFile不会帮助你,因为这个文件包含一个证书,通过这个证书,apache服务器用应用服务器validation自己…你不想这样做:你想让调用客户端使用他的证书
据推测,Apache应该可以将获得的证书信息通过应用服务器(例如通过AJP)传递给应用服务器,但目前为止还没有能够实现这一目标。 我会尝试更新这个答案,如果我得到它的工作…