Как сделать Indy OpenSSL совместимым с большинством серверов
Я использую следующий код для настройки SSLHandler для приложения отправки / получения POP3 / SMTP:
IdSSLHandler->SSLOptions->Mode = sslmClient;
IdSSLHandler->SSLOptions->Method = slvSSLv23;
IdSSLHandler->SSLOptions->SSLVersions = TIdSSLVersions() << sslvSSLv3 << sslvTLSv1 << sslvTLSv1_1 << sslvTLSv1_2;
Таким образом, приведенный выше код должен автоматически поддерживать SSL 3, TLS 1, TLS 1.1 и TLS 1.2. Это не работает должным образом и сообщает об ошибке «неправильная версия». КогдаSSLVersions
строка удаляется, тогда она работает, но по умолчанию она включаетsslvSSLv2
который я не хочу поддерживать. Это так же, как:
IdSSLHandler->SSLOptions->Mode = sslmClient;
IdSSLHandler->SSLOptions->Method = slvSSLv23;
IdSSLHandler->SSLOptions->SSLVersions = TIdSSLVersions() << sslvSSLv2 << sslvSSLv3 << sslvTLSv1 << sslvTLSv1_1 << sslvTLSv1_2;
По какой-то причине это работает, а выше не на том же сервере. я знаю этоslvSSLv23
является своего рода значением «использовать любую доступную версию». Так почему же он не работает с приведенным выше кодом, где нет версии 2?
Кроме того, я могу использовать TSL1, который, кажется, широко развернут, но если сервер поддерживает 1.1 или 1.2, тогда мой код не будет использовать более свежие версии, но будет использовать версию 1.0, если не используется что-то подобное выше.
Я хотел бы сделать инициализацию со следующими целями:
совместим со всеми серверами, независимо от того, используют ли они v3, tls1, tls1.1 или tls1.2автоматически использовать самую последнюю версию и использовать более низкую версию, если более свежая версия недоступна на сервере, но не ниже версии 3 - ошибка / исключение, если версия ниже 3Я думал, что первая версия кода предоставит это, но он сообщает об ошибке версии. Возможны ли вышеуказанные цели или необходимо указать настройку пользователя для выбора версии SSL для использования?