Недавно мы переместили сервер обмена за обратным прокси-сервером из-за потери общедоступного IP-адреса. Мне удалось настроить обратный прокси (httpd proxy_http
).
Но есть проблема с настройкой SSL.
При доступе к интерфейсу OWA с помощью Firefox все в порядке и работает. При доступе с помощью 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"
А:
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/
Вы правы, Шейн Мэдден, у меня несколько сайтов на одном публичном 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
Второй vHost:
<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, привязанных к одному и тому же порту, и должен быть представлен другой в зависимости от того, какое имя хоста посещается. Это зависит от Индикация имени сервера, который не поддерживается старыми браузерами или библиотеками шифрования XP.
К сожалению, обходные пути для этого (которые вам понадобятся, поскольку существует слишком много старых браузеров) нетривиальны; купите новый сертификат, который будет охватывать все на этом порту (подстановочный знак или сертификат альтернативного имени субъекта), или добавьте дополнительный IP-адрес на сервер, чтобы другой VirtualHost мог прослушивать его только с помощью собственного сертификата.