Delphi EIdOSSLUnderlyingCryptoError Exception - SSL3_GET_RECORD Неверный номер версии - PullRequest
0 голосов
/ 24 октября 2019

Я пытался использовать TRESTClient для подключения к веб-службе HTTPS с использованием TLS 1.2. Но НЕ УДАЧИ с отправкой multipart/form-data.

Так что теперь я пытаюсь с Инди. Я получил эту ошибку «Неверный номер версии».

Я думаю, что в коде нет ничего плохого, поскольку он работал с HTTP.

Возможно, в моем Delphi что-то не хватает. Что я должен установить и как?

procedure TForm10.Button2Click(Sender: TObject);
var
  HTTP: TIdHTTP;
  RequestBody: TStream;
  ResponseBody: string;
  myssl: TIdSSLIOHandlerSocketOpenSSL;
  Input: TIdMultipartFormDataStream;
begin
  ResponseBody := '';
  try
    try
      HTTP := TIdHTTP.Create;
      try
        Input := TIdMultipartFormDataStream.Create;
        try
          Input.Clear;
          Input.AddFormField('Email', 'xx@xx.com.tr');
          Input.AddFormField('Password', 'xx');

          myssl := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
          HTTP.IOHandler := myssl;
          myssl.SSLOptions.Mode := sslmUnassigned;
          myssl.SSLOptions.Method := sslvTLSv1_2;
          myssl.SSLOptions.SSLVersions := [sslvTLSv1_2];
          HTTP.HTTPOptions := [hoForceEncodeParams];

          HTTP.Request.CustomHeaders.FoldLines := False;
          ResponseBody := HTTP.Post('https://xxx.com.tr/api/Mobile/MobileLoginControl', Input);

        finally
          Input.Free;
        end;
      finally
        HTTP.Free;
      end;
    finally
    end;
  except
    ResponseBody := '"-20"';
  end;
end;

1 Ответ

1 голос
/ 24 октября 2019

Код в порядке, хотя вы включаете только TLS 1.2 на SSLIOHandler. Может быть, данный сайт не поддерживает TLS 1.2? Попробуйте также включить TLS 1.0 и 1.1:

myssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];

И вообще не устанавливайте SSLOptions.Method. Установка SSLVersions обновляет Method и наоборот. Так что устанавливайте одно или другое, а не оба.

...