Windows 8 IE 10 Ошибки рукопожатия TLS для Apache 2.2 на Centos 6.6
Мы действительно в замешательстве. Во время обновления до более новой среды Apache, работающей на CentOS 6.6, мы столкнулись со странными проблемами с соединениями TLS с компьютеров под управлением Windows 8. Первым намеком на ошибку было то, что пользователи IE10 жаловались, а также приложения.NET, работающие в Windows 8, вызывали наши веб-сервисы.
Мы установили modern.ie виртуальную машину Windows 8 с IE 10 и Fiddler 4. Мы заметили, что в Fiddler 4 команда tunnel периодически отображает вывод:
HTTP/1.1 200 Connection Established
FiddlerGateway: Direct
StartTime: 14:59:42.679
Connection: close
fiddler.network.https> HTTPS handshake to hostname.com failed. System.Security.Authentication.AuthenticationException A call to SSPI failed, see inner exception. < The logon attempt failed
Когда мы смотрим в средстве просмотра событий Windows на компьютере, мы видим событие Windows 36887 и сообщение.
A fatal alert was received from the remote endpoint. The TLS protocol defined fatal alert code is 49.
Итак, мы перешли на веб-сервер. Сервер работает:
httpd.x86_64 2.2.15-39.el6.centos
httpd-tools.x86_64 2.2.15-39.el6.centos
mod_ssl.x86_64 1:2.2.15-39.el6.centos
openssl.x86_64 1.0.1e-30.el6_6.7 @updates
Мы настраиваем журнал DEBUG для сбора информации о трафике. Что мы обычно видим в выводе:
[Tue Mar 24 17:38:08 2015] [debug] ssl_engine_io.c(1935): OpenSSL: I/O error, 5 bytes expected to read on BIO#31854001770 [mem: 3187c0110c3]
[Tue Mar 24 17:38:08 2015] [debug] ssl_engine_kernel.c(1882): OpenSSL: Exit: error in SSLv3 read finished A
[Tue Mar 24 17:38:08 2015] [debug] ssl_engine_kernel.c(1882): OpenSSL: Exit: error in SSLv3 read finished A
[Tue Mar 24 17:38:08 2015] [info] [client 123.125.71.101] (70007)The timeout specified has expired: SSL handshake interrupted by system [Hint: Stop button pressed in browser?!]
Теперь другие браузеры, такие как IE11 и Chrome в Windows 8, также будут генерировать те же ошибки в журналах сервера, но они как будто имеют встроенную логику повторных попыток и пропустят питание. Мы перепробовали все, что могли придумать:
- Изменение SSLCipherSuite для различных строк.
- Отключить TLS v1.1 и v1.2
- Обслуживайте локальный контент из Apache вместо контента с внутреннего сервера приложений, доступного через mod_proxy.
- Выключите KeepAlive
Когда мы сканируем сервер с помощью Qualys SSL Lab, он показывает совместимость со всем, кроме IE6/XP и Java 6, и получает оценку A.
Как будто у Windows возникают проблемы при повторном использовании SSL-соединения или чего-то подобного. Не вижу никаких ошибок в FireFox в Windows 8, потому что он использует свою собственную библиотеку вместо SChannel.
Любая помощь с благодарностью!
Спасибо Джонатан
Обновление 1 - 25.03.2015
Мы решили, что некоторые из проблем могут быть вызваны работой зашифрованного бэкпорта, выполненной RedHat, и несовместимостью с чем-то в Apache 2.2 или Mod_SSL. Много движущихся частей. Мы решили укусить пулю и собрать CentOS 7 на Apache 2.4, поскольку он обновил библиотеки Mod_SSL и OpenSSL по сравнению с веткой 6.6. Похоже, это исправило все ошибки Windows 8 SChannel, которые мы видели. Я подозреваю, что это в конечном итоге привлечет внимание RedHat, и в конечном итоге будет выпущено решение этой проблемы.
Обновление 2 - 25.03.2015 Не удается получить в IE10 ошибку SChannel с сервером CentOS 7, но некоторые клиенты.Net по-прежнему сообщают об ошибках, подобных этой:
[Fiddler] Соединение с secure.hot.com'не удалось.
System.Security.SecurityException Не удалось согласовать HTTPS-соединение с server.fiddler.network.https> HTTPS-соединение с secure.ultracart.com не удалось. System.Security.Authentication.AuthenticationException Сбой вызова SSPI, см. Внутреннее исключение. <Попытка входа не удалась
Обновление 3 - 27.03.2015 Оказывается, что брандмауэр перед веб-сервером, который выполняет проверку протокола, не любил что-то о пакетах TLS, отправляемых Windows 8, и прерывал трафик.