Ssl

Outlook Web Access、反向代理和瀏覽器

  • April 1, 2015

由於失去了公共 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,以便其他虛擬主機僅使用自己的證書進行偵聽。

引用自:https://serverfault.com/questions/248948