Вопрос или проблема
Существует ли общедоступный веб-сайт, который принимает только соединения TLS 1.2, чтобы я мог протестировать, может ли моё приложение успешно и безопасно подключиться к нему?
Предыстория:
У меня есть старое приложение на VB.NET, работающее на Windows Server 2008 R2 (64-бит).
В нём есть код вроде этого:
Dim req As New MSXML2.ServerXMLHTTP30
req.open("POST", "https://example.com", False)
Судя по тому, что я читал, ServerHTMLHTTP использует SChannel, и вы не можете контролировать используемые протоколы на уровне приложения.
Windows Server 2008 R2 должен поддерживать TLS 1.2, поэтому я подозреваю, что приложение будет работать, но мне хотелось бы это проверить, подключившись к сайту, который принимает только TLS 1.2.
Веб-сайт: https://badssl.com/ поддерживает различные версии TLS, используя различные поддомены, поэтому вы можете протестировать там множество вариантов!
Этот поддомен и порт поддерживают только TLSv1.2
https://tls-v1-2.badssl.com:1012/
Этот поддомен и порт поддерживают только TLSv1.1
https://tls-v1-1.badssl.com:1011/
Этот поддомен и порт поддерживают только TLSv1.0
https://tls-v1-0.badssl.com:1010/
и многое другое. И если этот домен исчезнет по какой-то причине, его источник здесь на GitHub
SSLLabs
Как указал @schroeder в комментариях, этот сайт оценивает возможности клиента и сообщает о них в ответе:
https://www.ssllabs.com/ssltest/viewMyClient.html
Недостатки:
- Ответ разработан для восприятия человеком в браузере. Неясно, требуется ли для ответа JavaScript для получения валидного ответа. Похоже, это не требуется, так как мы смогли показать разные ответы между машиной с Windows 10, работающей с приложением, и сервером на Windows Server 2008 R2, работающим с приложением.
- Сайт не позволяет выполнить POST; необходим GET. Наше приложение может быть настроено любым образом, но некоторые могут и не позволять.
- Сайт не требует TLS 1.2 таким образом, чтобы эмулировать поведение сайтов, которые это делают.
FancySSL
Как указал @paj28 в комментариях, этот сайт будет работать только если доступен TLS 1.2:
Недостатки:
- Похоже, что это сайт отдельного человека, и, несмотря на хороший ранг в Google, он не кажется долгосрочным стабильным решением.
- Согласно @dave_thompson_085, fancyssl.hboeck.de может не работать правильно, если ваш клиент не отправит SNI и не справляется (или неправильно обрабатывает) с повторной аутентификацией.
Результат
К сожалению, наше приложение не сработало безупречно на Windows 2008 R2. При попытке использовать сайт FancySSL, возникла следующая ошибка:
Обработчик находится в неправильном состоянии для запрашиваемой операции
При попытке использовать сайт SSLLabs, были получены такие результаты:
- TLS 1.2: Нет
- TLS 1.1: Нет
- TLS 1.0: Да*
- SSL 3: Да*
- SSL 2: Нет
(*) Без JavaScript этот тест надежно определяет только самый высокий поддерживаемый протокол.
Когда мы запускаем то же приложение на Windows 10 или Windows Server 2012 R2, приложение не сталкивается с ошибкой, и SSLLabs сообщает, что TLS 1.2 доступен.
Еще один вариант, который я обнаружил:
@paj28, похоже, указал нам в правильном направлении:
openssl s_server -tls1_2
Вы можете запустить эмулируемый TLS сервер и подключиться к нему со своего клиента. Я не уверен, какие настройки вам понадобятся и что именно подключение скажет вам, но это хороший, легковесный и локальный ресурс, который вы могли бы использовать для своих нужд.
Лучший пример — это веб-сайт NIST:
www.nist.gov
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp256r1 (равно 3072 бита RSA) FS 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027) ECDH secp256r1 (равно 3072 бита RSA) FS 128
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp256r1 (равно 3072 бита RSA) FS 256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH secp256r1 (равно 3072 бита RSA) FS
Я нашел этот URL – который возвращает версию TLS в составе JSON-результата:
Ответ или решение
К сожалению, непосредственно доступного сайта, который принимает только соединения по протоколу TLS 1.2, может быть трудно найти, однако я могу предложить несколько ресурсов, на которых вы можете протестировать ваши клиентские возможности для подключения:
-
BadSSL:
Один из распространённых ресурсов для тестирования различных версий TLS – это BadSSL. Они предлагают поддомены, которые поддерживают разные версии TLS. Для проверки работы с TLS 1.2 вы можете использовать следующую ссылку: -
SSL Labs:
Вы можете использовать сайт SSLLabs, который оценивает возможности вашего клиента и предоставляет информацию о поддерживаемых протоколах TLS. Например, сайт покажет, какие версии TLS поддерживаются на вашем клиенте и каковы результаты соединения. Однако имейте в виду, что проверка проходит по схеме GET и требует наличия браузера, может не всегда отразить информацию в удобочитаемом формате. -
FancySSL:
Этот сайт (FancySSL) будет работать только если ваш клиент поддерживает TLS 1.2. Однако это сторона, созданная индивидуумом, поэтому стоит учесть, что её стабильность в долгосрочной перспективе может быть под вопросом. -
NIST:
Ресурс NIST также поддерживает TLS 1.2, и вы можете протестировать ваш клиент, подключившись к этому сайту. Результаты можно проверить на SSL Labs. -
Akamai Check TLS:
Я нашёл URL, который возвращает версию TLS в формате JSON: Akamai TLS Checker. Это может быть также полезно для проверки возможностей вашего клиента. -
Локальный сервер на OpenSSL:
Если вы не нашли нужный сайт, вы можете настроить локальный сервер, используя OpenSSL. Запустите командуopenssl s_server -tls1_2
, чтобы запустить эмулированный сервер TLS 1.2 на вашей машине и протестировать на нём ваше приложение.
Эти ресурсы и методы должны помочь вам проверить, поддерживает ли ваше приложение подключение по протоколу TLS 1.2 и работает ли оно корректно. Обратите внимание на то, что может потребоваться дополнительная настройка на стороне клиента, особенно для старых версий Windows или устаревшего программного обеспечения, чтобы обеспечить поддержку более современных протоколов безопасности.