Недавно при тестировании развернутой конфигурации ADFS столкнулись с проблемой подключения к ADFS 3.0 с использованием Internet Explorer 8 под управлением Windows XP. В браузере получаем вот такое сообщение
При использовании IE 8 под управлением Windows 7 проблема не повторилась, так же как и для Google Chrome.
После этого приложение, наконец-то, заработало.
При исследовании очень помогла статья Kaushal Kumar Panday с пошаговым исследованием проблем SSL. За что автору отдельное спасибо.
При использовании IE 8 под управлением Windows 7 проблема не повторилась, так же как и для Google Chrome.
Первая мысль состояла в том, что в Windows XP отсутствует поддержка протоколов TLS 1.1 и 1.2, а использование TLS 1.0 может быть запрещено на сервере. Быстрая проверка, однако, опровергла это предположение: отключив использование TLS 1.1 и 1.2, Internet Explorer под Windows 7 переключился на использование TLS 1.0. Проверка настроек SChannel в реестре на сервере подтвердила: используется конфигурация по умолчанию, в которой TLS 1.0 разрешен.
Очевидно, требовалось более глубокое исследование проблемы. Первое, что нужно было сделать - проверить на каком шаге прерывается процесс SSL handshake. И тут ждал сюрприз, дело в том, что как такового процесса "рукопожатия" не было. Клиент отправлял перечень поддерживаемых шифров (cipher suite), но сервер в ответ просто разрывал соединение.
Погуглив, стало понятно, что всё это в точности совпадает с симптомами отсутствия поддержки расширения Server Name Indication (SNI) протокола TLS (подробнее можно посмотреть тут). Предлагаемый вариант решения предусматривал назначение сертификата на фиктивный IP адрес 0.0.0.0, что позволяло выполнить сопоставление с запросом, не содержащим имени сервера (а именно такие запросы отправлял IE 8 под Windows XP):
Однако, даже реализация этого решения не позволила добиться корректной работы в IE 8.
Сертификат, созданный при развертывании ADFS, по каким-то причинам не хотел работать в таком режиме. Проблему решило создание нового сертификата и назначение его на адрес 0.0.0.0 и все используемые имена ADFS при помощи следующих команд:
http add sslcert ipport=0.0.0.0:443 certhash=<cert hash> appid={5d89a20c-beab-4389-9447-324788eb944a} certstorename=MY sslctlstorename=AdfsTrustedDevices
http add sslcert hostnameport=<adfs hostname>:443 certhash=<cert hash> appid={5d89a20c-beab-4389-9447-324788eb944a} certstorename=MY sslctlstorename=AdfsTrustedDevices
После этого приложение, наконец-то, заработало.
При исследовании очень помогла статья Kaushal Kumar Panday с пошаговым исследованием проблем SSL. За что автору отдельное спасибо.