Outlook Web Access、反向代理和浏览器

Outlook Web Access、反向代理和浏览器

由于丢失了公共 IP,我们最近将 Exchange 服务器移到了反向代理后面。我已成功配置了反向代理 ( 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 [email protected]


    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

第二个 vHost 是:

<VirtualHost *:443>
    ServerName exchange.domain2.com
    ServerAdmin [email protected]


    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 包)。

答案1

一些浏览器版本号会很好,以及有关该服务器上其他内容的更多信息。

根据您提供的信息,听起来好像该服务器上还有其他 SSL 证书,而非 Firefox 浏览器正在获取其他证书之一?从这里我猜他们获取的证书来自默认虚拟主机?我还猜您正在从 Windows XP 系统进行测试。

我的意思是,你有多个 SSL 证书都绑定到同一个端口,并且应该根据所访问的主机名显示不同的证书。这取决于服务器名称指示,旧版浏览器和 XP 的加密库都不支持该功能。

不幸的是,解决这个问题的办法(你需要,因为现在仍然有太多的旧浏览器)并不简单;购买一个可以覆盖该端口上所有内容的新证书(通配符或主题备用名称证书),或者向服务器添加一个额外的 IP,以便其他 VirtualHost 仅使用其自己的证书即可进行监听。

相关内容