由于丢失了公共 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 仅使用其自己的证书即可进行监听。