Я использую Delphi 2010, новейшую Indy 10.6.2 (5498) и OpenSSL 1.0.2r (с indy.fulgan.com), и я не могу заставить его использовать TLS 1.2. Когда я открываю страницу, упомянутую позже, она возвращает EIdOSSLUnderlyingCryptoError:
Ошибка подключения по SSL. Ошибка: 1408F10B: SSL
подпрограммы: SSL3_GET_RECORD: неправильный номер версии
Вот код, который я использую, чтобы открыть веб
var
IdHTTP: TIdHTTP;
begin
IdHTTP:=TIdHTTP.Create;
try
IdHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
TIdSSLIOHandlerSocketOpenSSL(IdHTTP.IOHandler).SSLOptions.Method := sslvTLSv1_2;
TIdSSLIOHandlerSocketOpenSSL(IdHTTP.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2];
IdHTTP.Get('https://...');
finally
IdHTTP.Free;
end;
end;
Когда я открываю https: // www.google.com, тогда он правильно использует TLS 1.2, вот подробности из Wireshark
Secure Sockets Layer
TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 512
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 508
Version: TLS 1.2 (0x0303)
Но когда я открываю эту страницу https: // www.downloadtb.com, Indy использует TLS 1.0. Сайт использует только TLS 1.2 и этот шифр: ECDHE-RSA-AES256-GCM-SHA384.
Secure Sockets Layer
TLSv1 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 329
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 325
Version: TLS 1.2 (0x0303)
Кажется, он смешивает TLS 1.0 и 1.2. Это какой-то запасной вариант? Как мне это исправить?
РЕДАКТИРОВАТЬ: Что-то изменилось на сайте, и Indy теперь правильно использует TLS 1.2
Secure Sockets Layer
TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 512
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 508
Version: TLS 1.2 (0x0303)