Outlook Web Access、反向代理和瀏覽器
由於失去了公共 IP,我們最近將交換伺服器移到了反向代理後面。我設法配置了反向代理 (
httpd proxy_http
)。但是 SSL 配置存在問題。
使用 Firefox 訪問 OWA 界面時,一切正常。使用 MSIE 或 Chrome 訪問時,它們不會檢索到好的 SSL 證書。
我認為這是由於 httpd 的多個虛擬主機。是否有一種解決方法可以確保 MSIE/Chrome 像 FF 那樣請求好域名的證書?
已經使用 SSL 虛擬主機進行了測試:
SetEnvIf User-Agent ".*MSIE.*" value BrowserMSIE Header unset WWW-Authenticate Header add WWW-Authenticate "Basic realm=exchange.domain.com"
A:
ProxyPreserveHost On
還:
BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0
或者:
SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0
還有很多
ProxyPass
等等 ……ProxyReversePath``/exchweb /exchange /public
而且它似乎仍然不起作用。有什麼線索嗎?
謝謝。
編輯 1:版本的精度
# openssl version OpenSSL 0.9.8k-fips 25 Mar 2009 /usr/sbin/httpd -v Server version: Apache/2.2.11 (Unix) Server built: Mar 17 2009 09:15:10
瀏覽器版本:
MSIE : 8.0.6001 Opera: Version 11.01 Revision 1190 Firefox: 3.6.15 Chrome: 10.0.648.151
作業系統:
Windows Vista 32bits.
它們都符合 SNI,我今天下午對它們進行了測試https://sni.velox.ch/
你說得對,Shane Madden,我在同一個公共 IP(以及同一個埠)上有多個站點。伺服器本身只是一個反向代理,它將地址重寫到內部伺服器。
預設主機是開發站點,使用與 OWA 不匹配的證書進行配置(當然……本來很容易)
<VirtualHost *:443> ServerName dev2.domain.com ServerAdmin tech_support@domain.com CustomLog "| /usr/sbin/rotatelogs /var/log/httpd/access-%y%m%d.log 86400" combined ErrorLog "| /usr/sbin/rotatelogs /var/log/httpd/error-%y%m%d.log 86400" LogLevel warn RewriteEngine on SetEnvIfNoCase X-Forwarded-For .+ proxy=yes SSLEngine on SSLProtocol -all +SSLv3 +TLSv1 SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL:+SSLv3 SSLCertificateFile /etc/httpd/ssl/domain.com.crt SSLCertificateKeyFile /etc/httpd/ssl/domain.com.key RewriteCond %{HTTP_HOST} dev2\.domain\.com RewriteRule ^/(.*)$ http://dev2.domain.com/$1 [L,P] </VirtualHost>
域名證書是 *.domain.com
第二個虛擬主機是:
<VirtualHost *:443> ServerName exchange.domain2.com ServerAdmin tech_support@domain.com CustomLog "| /usr/sbin/rotatelogs /var/log/httpd/exchange/access-%y%m%d.log 86400" combined ErrorLog "| /usr/sbin/rotatelogs /var/log/httpd/exchange/error-%y%m%d.log 86400" LogLevel warn SSLEngine on SSLProxyEngine On SSLProtocol -all +SSLv3 +TLSv1 SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL:+SSLv3 SSLCertificateFile /etc/httpd/ssl/exchange.pem SSLCertificateKeyFile /etc/httpd/ssl/exchange.key RewriteEngine on SetEnvIfNoCase X-Forwarded-For .+ proxy=yes RewriteCond %{HTTP_HOST} exchange\.domain2\.com RewriteRule ^/(.*)$ https://exchange.domain2.com/$1 [L,P] </VirtualHost>
它的證書僅是 exchange.domain2.com。
我認為 SNI 是在我的伺服器上未啟動的某個地方。openssl 和 apache 接縫的版本可以支持 SNI。我唯一不知道的是 httpd 是否已使用好的選項進行編譯。(我假設它是一個 Fedora 數據包)。
一些瀏覽器版本號會很好,以及有關該伺服器上其他內容的更多資訊。
根據您提供的內容,聽起來該伺服器上還有其他 SSL 證書,而非 firefox 瀏覽器正在獲取其他證書之一?從這裡我會冒險猜測他們獲得的證書來自預設的虛擬主機?我還冒昧地猜測您正在從 Windows XP 系統進行測試。
我要說的是,您有多個 SSL 證書都綁定到同一個埠,並且應該根據正在訪問的主機名呈現不同的證書。這取決於Server Name Indication,舊版瀏覽器或 XP 的加密庫不支持。
不幸的是,解決這個問題(你需要,還有太多舊瀏覽器)的解決方法並不簡單。購買將涵蓋該埠上所有內容的新證書(萬用字元或主題備用名稱證書),或向伺服器添加一個額外的 IP,以便其他虛擬主機僅使用自己的證書進行偵聽。