2013-10-10 137 views
15

有關背景資料:(在底部問題)是否有可能忽略了一個Apache proxy'd證書

我試圖連接到客戶端,誰擁有8臺服務器,所有這些都具有唯一的IP地址。客戶端在所有服務器上使用相同的SSL證書(對於本示例,證書名稱== www.all_servers.com)。客戶端只允許通過https傳入請求。

我想創建一個使用mod_proxy將不同的URI映射映射到不同服務器的apache代理。例如:

https://PROXY_SERVER/SERVER1/{REQUEST} 

這將發送{REQUEST}到server1

https://PROXY_SERVER/SERVER2/{REQUEST} 

就送{REQUEST}到server2。 到目前爲止,很簡單。

在Apache 2.2的,這可以通過使用IP地址,像這樣實現的:

SSLProxyEngine On 

ProxyPass /server1 https://1.1.1.1/ 
ProxyPassReverse /server1 https://1.1.1.1/ 

ProxyPass /server2 https://1.1.1.2/ 
ProxyPassReverse /server2 https://1.1.1.2/ 

這是由於Apache 2.2的如果證書不匹配檢查(1.1.1.1 = www.all_servers.com )

但是,在Apache 2.4中,我現在正在收到證書問題(正確)。 (這個確切的代碼工作在一個Apache 2.2箱)

[Thu Oct 10 12:01:48.571246 2013] [proxy:error] [pid 13282:tid 140475667224320] (502)Unknown error 502: [client 192.168.1.1:48967] AH01084: pass request body failed to 1.1.1.1:443 (1.1.1.1) 
[Thu Oct 10 12:01:48.571341 2013] [proxy:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH00898: Error during SSL Handshake with remote server returned by /server1/asd 
[Thu Oct 10 12:01:48.571354 2013] [proxy_http:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH01097: pass request body failed to 1.1.1.1:443 (1.1.1.1) from 192.168.1.1() 

我無法使用/ etc/hosts文件,作爲一個服務器會的工作,使用:

1.1.1.1 www.all_servers.com 

SSLProxyEngine On 
ProxyPass /server1 https://www.all_servers.com/ 
ProxyPassReverse /server1 https://www.all_servers.com/ 

但許多服務器不會


那麼,實際的問題:

有沒有辦法爲ce mod_proxy忽略未命中匹配的證書。或者,有沒有更好的方法來做到這一點。

感謝您的任何幫助!

+0

只是爲了避免混淆,當談論服務器時,您可以稱呼您的客戶端/客戶不是「客戶端」。 – Bruno

+0

投票轉移到ServerFault。 – Bruno

回答

15

您可以在您的Apache服務器上設置SSLProxy*選項(就反向代理連接而言,這是一個客戶端)。

這是用SSLProxyCheckPeerCN(在2.2中默認關閉,但在默認情況下在2.4下)完成的,但我不確定這將如何與IP地址一起工作(因爲CN中的IP地址不是標準的)。在Apache Httpd 2.4中有一個新選項用於檢查SAN(SSLProxyCheckPeerName),但我不確定IP地址的表現如何。在DNS SAN擴展或CN

有IP地址不是標準符合HTTPS

如果類型DNSNAME的subjectAltName擴展存在,必須使用作爲身份。否則,必須使用證書的主題字段中的(最具體的)通用 名稱字段。 雖然使用通用名稱是現有的慣例,但不推薦使用 ,並且鼓勵認證機構改爲使用 dNSName。

[...]

在一些情況下,URI被指定爲IP地址,而不是一個主機名。在這種情況下,iPAddress subjectAltName必須在證書中出現 ,並且必須與URI中的IP完全匹配。

+1

感謝這工作得很好,我只有checkCN關閉,一旦我添加checkName關閉,這一切都開始奇蹟般地工作 – Gwynnie

+1

關閉此連接可能容易受到MITM攻擊,除非你可能已經導入'SSLProxyCACertificate *直接(並且只有*那些證書)。 – Bruno