Я использую TIdSSLIOHandlerSocketOpenSSL, чтобы открыть соединение TLS/SSL. В настоящее время я хочу поддерживать tls 1.0 до 1.2.Как определить, какой протокол TLS/SSL был согласован при использовании sslvSSLv23?
Я инициализирую IOHandler следующим образом.
TIdSSLIOHandlerSocketOpenSSL(FSocket.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1];
После установления соединения, как я могу узнать, какой протокол был согласован для подключения? (И для обеспечения правильной конфигурации клиентского и тестового серверов, и в конечном итоге для целей статистики).
Я установил SSLContext.Method
после подключения, но он все еще показывает sslvSSLv23
после подключения. SSLContext.SSLVersions
показаны [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1]
.
Как я могу получить эту информацию?
'Cipher.Version', похоже, не содержит текущий используемый протокол (или я серьезно что-то пропустил). Если, например, я принудительно использую только TLS1.1 на клиенте, 'Cipher.Version' возвращает 'TLSv1/SSLv3'. Я рассмотрю SSL_get_version. –
SSL_get_version дал мне информацию, которую я искал. Благодарю. –
@KenBourassa hmm, 'SSL_CIPHER_get_version()' не так привык, но похоже, что [документация] (https://www.openssl.org/docs/manmaster/man3/SSL_CIPHER_get_version.html) изменилась поскольку я в последний раз видел это, поэтому поведение, по-видимому, со временем изменилось. В этом случае придерживайтесь 'SSL_get_version()'. Я мог бы интегрировать в него новое свойство. –