Мы действительно в тупике. Во время обновления до новой среды Apache, работающей на CentOS 6.6, мы столкнулись со странными проблемами с подключениями TLS с компьютеров с Windows 8. Первым намеком на ошибку были жалобы пользователей IE10, а также обращения приложений .NET к нашим веб-службам в Windows 8.
Мы установили современную виртуальную машину 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, также будут генерировать те же ошибки в журналах сервера, но это похоже на то, что они имеют встроенную логику повтора и будут работать. Мы перепробовали все, что только могли придумать:
Когда мы сканируем сервер с помощью 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. Похоже, это устранило все обнаруженные нами ошибки SChannel в Windows 8. Я подозреваю, что в конечном итоге это привлечет внимание 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, и он прекращал трафик.