Как настроить IIS 7.5 SSL \ TLS для работы с iOS 9 ATS

Как настроить IIS 7.5 SSL \ TLS для работы с iOS 9 ATS

Проблема:Наше мобильное приложение больше не может устанавливать безопасное соединение с нашим веб-сервисом, поскольку iOS 9 теперь использует ATS.

Фон: iOS 9 представляет App Transport Security

Настройка сервера:Windows Server 2008 R2 SP1 (VM) IIS 7.5, SSL-сертификаты от digicert. Брандмауэр Windows отключен.

Ключ RSA 2048 бит (e 65537)

Выпускник DigiCert SHA2 Secure Server CA

Алгоритм подписи SHA512withRSA

Требования к безопасности передачи данных приложения:

Сервер должен поддерживать протокол Transport Layer Security (TLS) версии не ниже 1.2. Шифры соединения ограничены теми, которые обеспечивают прямую секретность (см. список шифров ниже). Сертификаты должны быть подписаны с использованием алгоритма хэширования подписи SHA256 или лучше, либо с ключом RSA длиной 2048 бит или больше, либо с ключом Elliptic-Curve (ECC) длиной 256 бит или больше. Недействительные сертификаты приводят к жесткому сбою и отсутствию соединения. Вот принятые шифры:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Что было испробовано:

  1. Добавление исключений в мобильное приложение для разрешения работы нашего домена работает, но я не хочу использовать этот незащищенный метод, я хочу исправить наш SSL.
  2. ИспользовалIIS Криптоиспользовать 'best practice', пробовал 'pci' и пользовательские настройки. Даже пробовал изменять криптографический набор только на список выше и переупорядочивать. После каждой попытки сервер перезагружается, и иSSL-лабораториибыл запущен (после очистки кэша). Мне удалось перейти от оценки F к A и даже к A-, но это привело только к тому, что iOS 8 и 9 не смогли установить защищенные соединения. (NSURLErrorDomain Code=-1200 и _kCFStreamErrorCodeKey=-9806) введите описание изображения здесь
  3. Восстановил ВМ и попробовал скрипт PowerShellНастройте IIS для SSL Perfect Forward Secrecy и TLS 1.2Я даже сделал вторую попытку, в ходе которой я удалил шифры из скрипта питания, оставив минимальный список того, что требуется.

Полученные результаты:Всегда похоже, рейтинги A или A-. iOS8 и iOS9 не могут согласовать безопасное соединение. Симуляция рукопожатия приводит к "несоответствию протокола или набора шифров" для продуктов Safari и iOS. введите описание изображения здесь введите описание изображения здесь

ОБНОВЛЯТЬПосле взаимодействия со службой поддержки Apple мы провели захват трассировки пакетов:

$ tcpdump -n -r trace.pcap
reading from file trace.pcap, link-type EN10MB (Ethernet)
client > server [S], seq 1750839998, win 65535, length 0
server > client [S.], seq 2461151276, ack 1750839999, win 8192, length 0
client > server [.], ack 1, win 4104, length 0
client > server [P.], seq 1:175, ack 1, win 4104, length 174
server > client [R.], seq 1, ack 175, win 0, length 0

Первые три пакета — это классическое трехэтапное рукопожатие SYN - SYN-ACK - ACK, устанавливающее TCP-соединение. Четвертый пакет — это отправка iOS на ваш сервер сообщения TLS Client Hello, первый шаг в установке TLS-соединения через TCP-соединение. Я разобрал это сообщение, и оно выглядит достаточно разумным. В пятом пакете сервер просто разрывает соединение (отправляя RST).

Кто-нибудь знает, зачем IIS 7.5 выполняет RST?

решение1

Вопрос старый, но он будет найден при поиске. Я потратил некоторое время, чтобы найти решение той же проблемы. Поэтому я решил написать ответ, чтобы поделиться своими результатами с другими.

Короткий ответ: вам не следует использовать IIS Crypto для указания порядка наборов шифров. Я рекомендую вам нажать на кнопки «По умолчанию», чтобы удалить ранее установленный порядок, а затем использовать групповую политику («Конфигурация компьютера» \ «Административные шаблоны» \ «Сеть» \ «Параметры конфигурации SSL») для настройки наборов шифров через локальную политику.

Причиной ошибки «несоответствие протокола или набора шифров» может быть одна из следующих::

  • ваш сервер поддерживает некоторые "плохие наборы шифров"
  • Ваш сервер не поддерживает некоторые наборы шифров, которые ДОЛЖНЫ поддерживаться в соответствии со спецификацией TLS.
  • Ваш сервер поддерживает HTTP/2 и имеет некоторые протоколы изчерный список вышедругие протоколы, которых нет в списке. Обычно для устранения проблемы достаточно изменить порядок наборов шифров.

Точный черный список может быть разным в разных системах. Вы можете найти в Интернете некоторые черные списки. Например,Приложениеиз RFC 7540 (Hypertext Transfer Protocol Version 2 (HTTP/2)) содержит один список. Наборы шифров предназначены TLS_RSA_WITH_AES_128_CBC_SHAдля TLS 1.2 (см.здесь) и TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256для TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS 1.3 (см.здесь). TLS_ECDHE_ECDSA_*Важно только, используете ли вы сертификат с эллиптическими кривыми. Другой очень хороший набор шифров TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256еще не реализован Microsoft. Кроме того, вы можете рассмотреть возможность добавления по крайней мере TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAподдержки соединения со старых систем и TLS_RSA_WITH_AES_128_CBC_SHAподдержки очень старых систем (Android 2.3.7, , Java 6u45, OpenSSL 0.9.8y) и TLS_RSA_WITH_3DES_EDE_CBC_SHAтолько если вам нужна поддержка IE 8 / XP. Таким образом, вы можете использовать сегодня, например

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

с отключенным TLS 1.0, TLS 1.1чтобы иметь лучшую безопасность или просто

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

если вам нужна хорошая безопасность и наилучшая производительность.

Например, для решения вашей проблемы вы можете задать следующий короткий набор шифров:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Ниже я привожу пример конфигурации для Windows 10. Я настроил IIS 10 так, чтобыРейтинг A+ от Qualys SSL Labs с ключом RSA 2048 и бесплатным SSL-сертификатом от Let's Encrypt.

введите описание изображения здесь

Я отключил DES 56/56, RC2 128/128, RC2 40/128, RC2 56/128, RC4 128/128, RC4 40/128, RC4 56/128, RC4 64/128, Triple DES 168/168, NULL, MD5, Multi-Protocol Unified Hello, PCT 1.0, SSL 2.0, SSL 3.0 и TLS 1.0/1.1вручную в реестре(видетьКБ245030). Я отключил протоколы TLS 1.0 и TLS 1.1 только потому, что TLS_FALLBACK_SCSV (атака понижения версии) до сих пор не может быть предотвращена в IIS, что делает невозможным получение рейтинга A+www.ssllabs.com. Я считаю это недостатком, но TLS 1.2 в настоящее время поддерживается очень широко. Кстати, вы можете использовать DisabledByDefault: 1, но Enabled: 1для TLS 1.0 и TLS 1.1. Было бы полезно, если бы вы запустили SQL Server 2008/2012 на компьютере. Веб-сервер не будет использовать TLS 1.0 и TLS 1.1, но SQL Server использует.

Самым важным шагом, который отнял у меня много времени и который является вашей главной проблемой, была настройка наборов шифров.Я сделал это с помощью gpedit.msc. Я выбрал «Конфигурация компьютера» \ «Административные шаблоны» \ «Сеть» \ «Параметры конфигурации SSL» и настроил значение «Порядок набора шифров SSL» следующим образом

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Вышеуказанный порядок может быть не оптимальным, и я не уверен, что все вышеперечисленные протоколы поддерживаются в IIS 7.5 (я использовал IIS 10.0 из Windows 10). Тем не менее, я уверен, что ваша проблема связана со списком Cipher Suite, потому что у меня была точно такая же проблема, как вы описали, во время моих экспериментов со списком Cipher Suite.

В любом случае, после настройки вышеуказанных параметров в групповой политике иперезагрузка компьютера( gpupdate /force /target:computerбыло недостаточно в моих тестах) Я получаю оценки A+ и следующий список результатов тестирования части «Имитация рукопожатия»:

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

Видно, что iOS успешно поддерживается для следующих клиентов:

Safari 6 / iOS 6.0.1
Safari 7 / iOS 7.1
Safari 8 / iOS 8.4
Safari 9 / iOS 9

Клиенты, которые не поддерживают TLS 1.2, кажутся мне теперь не столь важными, и я думаю, что приведенная выше конфигурация является хорошим компромиссом между поддержкой устаревших клиентов и использованием безопасных протоколов.

решение2

Если ваш образ IIS Crypto недавний, оставьте настройки такими, какие они есть, но включите SHA, Diffie-Hellman и PKCS. Это даст вам рейтинг A, но позволит подключаться iOS 8 и ниже.

решение3

Я боролся с этим несколько дней. В частности, я подключался из приложения iOS с помощью Xamarin Forms PCL для подключения к rest-сервису ASP.NET Web Api 2 с аутентификацией OAuth2 Bearer Token.

В конце концов, мне помогло использование IIS Crypto's Best practices. Затем отредактируйте ключ реестра, который он установил для порядка набора шифров:

KEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002\Function

Мне удалось добиться успеха со следующим значением:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521,TLS_ECDH E_RSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521,TLS_ECDHE_ RSA_WITH_AES_128_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CB C_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SH A256_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES _128_CBC_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_DHE_RSA_WI TH_AES_256_GCM_SHA384,TLS_DHE_RSA_С_AES_128_GCM_SHA256,TLS_DHE_DSS_С_AES_256_CBC_SHA256,TLS_DHE_DSS_С_AES_256_CBC_SHA,TLS_DHE_DSS_С_AES_128_CBC_SHA256,TLS_DHE_DSS_С_AES_128_CBC_SHA,TLS_DHE_DSS_С_3DES_EDE_CBC_SHA,TLS_RSA_С_RC4_128_ SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_RC4_128_MD5,TLS_RSA_WITH_DES_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

Последний был найден с помощью Charles Proxy, который автоматически согласовывал TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Причиной, по которой я пришел к этому, было то, что соединения успешно устанавливались при включенном Charles Proxy (с установленными сертификатами симулятора), но в противном случае терпели неудачу. Добавление набора, который он использовал при согласовании, помогло. Похоже(?), что прокси повторно согласовывал с моей службой REST что-то, что поддерживалось моим сервером, но не клиентом iOS.

Обратите внимание, что многие наборы шифров были получены из спецификации ssllabs по предпочтительным наборам для различных устройств iOS/OSX. Значение выше должно согласовываться со всеми браузерами, кроме IE 6 на XP.по данным ssllabs, имеет рейтинг A.

Связанный контент