Apache SSL 代理找不到客戶端證書?
我的 Web 伺服器需要與位於防火牆後面的第 3 方伺服器集成。為了通過防火牆,所有請求都必須來自相同的 IP 地址並通過 SSL 進行身份驗證。所以我設置了一台機器,它應該作為代理工作,並通過 SSL 將所有流量轉發到第 3 方伺服器。
我使用證書和匹配的密鑰文件設置了代理,並且可以使用證書和密鑰文件通過 CURL 向 3rd 方服務成功請求。我在 Apache 上建立了一個虛擬主機來傳遞這些請求,但不斷收到錯誤消息,提示與遠端伺服器的 SSL 握手失敗。我在我的 apache 日誌中看到以下錯誤消息:
代理客戶端證書回調:(:443)下游伺服器想要客戶端證書,但沒有配置
$$ Sun Jul 29 01:40:48 2012 $$ $$ error $$(502) 未知錯誤 502:代理:將請求正文傳遞給 <3rd 方 IP>:18443 (<3rd 方 URL>)
$$ Sun Jul 29 01:40:48 2012 $$ $$ error $$ $$ client $$代理:與 / 返回的遠端伺服器進行 SSL 握手期間出錯
我的 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
and合併.key
到一個文件中,並使用以下命令指向它:SSLProxyMachineCertificateFile /path/to/combined.pem
恕我直言,他真正想要的是一個 Apache,它將 SSL 請求代理到端點伺服器,大概是一個應用程序伺服器,它執行 SSL 客戶端證書身份驗證……
SSLProxyMachineCertificateFile 在這種情況下對您沒有幫助,因為該文件包含一個證書,apache 伺服器通過該證書向應用程序伺服器進行身份驗證…您不希望這樣:您希望呼叫客戶端使用他的證書
據推測,Apache 應該可以將它獲得的證書資訊傳遞到應用程序伺服器,例如通過 AJP,但到目前為止我還不能讓它工作。如果我讓它工作,我會嘗試更新這個答案……