Итак, есть способ узнать, какой протокол сервер работает до установления соединения?
Нет. Но вы должны теперь предположить его «TLS 1.0 и выше».
Как указал Штеффен, вы используете SSLv23_method
и варианты контекста для реализации «TLS 1.0 и выше». Вот полный код.Вы можете использовать его в клиенте или сервере:
const SSL_METHOD* method = SSLv23_method();
if(method == NULL) handleFailure();
SSL_CTX* ctx = SSL_CTX_new(method);
if(ctx == NULL) handleFailure();
const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
SSL_CTX_set_options(ctx, flags);
Теперь, есть неявное предположение о том, что здесь не очевидно; и это предположение неверно. Это предположение заключается в том, что существует версия TLS min и TLS max.
Что происходит, существует базовый уровень записи SSL/TLS, который несет полезную нагрузку протокола. Уровень записи TLS не зависит от уровня протокола и имеет собственную версию. Люди интерпретируют версию уровня TLS-записи как версию «TLS min»; и версию протокола как версию «TLS max». Большинство клиентов серверов, сайтов и служб используют его таким образом.
Однако IETF не указывает его таким образом, и браузер не использует его таким образом. Из-за этого мы недавно получили TLS Fallback Signaling Cipher Suite Value (SCSV).
Браузер правильный. Вот как его должно быть сделано:
- попробовать TLS 1.2, используйте Fallback Signaling для обнаружения даунгрейд атаки
- если TLS 1.2 не удается, то попробуйте TLS 1.1, используйте Fallback Signaling для обнаружения даунгрейд атаки
- если TLS 1.1 терпит неудачу, затем попробуйте TLS 1.0, используйте Fallback Signaling для обнаружения атак с понижением рейтинга
Многие сдаются после отказа TLS 1.0. Некоторые пользовательские агенты могут продолжить работу с SSLv3.
Почему IETF не перемещается, чтобы дать нам «TLS min» и «TLS max»? Это все еще загадка. Я считаю, что данный эффективный аргумент «предположим, что клиент хочет использовать TLS 1.0, 1.2 и 1.3, но не 1.1». Я не знаю никого, кто отказывается от такой версии протокола, поэтому для меня это просто солома. (Это один из тех случаев, когда я задаюсь вопросом, влияет ли правоохранительная деятельность или национальные интересы, такие как NSA, на стандарты).
Этот вопрос недавно был поднят в Рабочей группе TLS. С TLS: prohibit <1.2 support on 1.3+ servers (but allow clients) (21 мая 2015):
Теперь может быть хорошее время, чтобы добавить (3) для TLS 1.3: есть клиент указать как наименьшую версию TLS они готовы использовать, и которые они хотят использовать. И MAC или вывести из него его так, что нельзя подделать или понизить.
Вы все еще можете обеспечить версию слоя записи TLS, и вы можете держать его не-MAC'd, поэтому он может быть подделан, чтобы вызвать раскрытие или аварии :)
Фактически, это как версии в уровне записи и клиентский протокол . Он останавливает эти глупые танцы в браузерах и другие пользовательские агенты выполняют без необходимости TLS Fallback SCSV.
Если часть миссии IETF заключается в документировании существующих практик, IETF не выполняет свою миссию.
* «Итак, вопрос в том, почему это не так?» * - укажите имя сервера или URL-адрес для тестирования. В противном случае нам недостаточно информации, чтобы помочь вам. (И, пожалуйста, не меняйте вопрос после факта. Задайте новый вопрос). – jww
У меня нет доступа к серверу самостоятельно.Однако я проверю, разрешено ли мне передавать имя IP/хоста вам. Это может занять несколько дней. –
OK, если вы не хотите публиковать его публично, тогда напишите мне по адресу * noloader, gmail account *. – jww