"1408F10B: rotinas SSL: SSL3_GET_RECORD: chamada de número de versão incorreta:" no Indy

Eu tenho um aplicativo da web que faz frequentesTIdHTTP chamadas para a API do Google Analytics (cerca de 25.000 a 50.000 por dia). De tempos em tempos, as chamadas para a API falham com a mensagem de erro na linha de assunto (muitas vezes - menos de 1 em 1000 vezes). Nunca consegui encontrar um padrão para que isso acontecesse. E tentar novamente a chamada com falha geralmente funciona. Então parece inteiramente aleatório.

Eu tenho a versão mais recente do openssl (1.0.2.1 - 20/03/2015). E a versão mais recente do Indy (arquivos de código-fonte datados de 01/07/2015).

Abaixo está o código fonte básico para fazer essas chamadas.

Alguém tem alguma idéia do que poderia ser?

Fazer duas chamadas simultâneas à API afetaria as coisas (isso está ocorrendo em um aplicativo Web com vários threads)?

IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil);
IdSSLIOHandlerSocket1.PassThrough := True;
IdHTTP := TIdHTTP.create(nil);
IdHTTP.reusesocket := rsTrue;
IdSSLIOHandlerSocket1.reusesocket := rsTrue;
idhttp.handleredirects := True;
with IdSSLIOHandlerSocket1 do begin
  SSLOptions.Method := sslvTLSv1_2;
  SSLOptions.SSLVersions := [sslvTLSv1_2];
  SSLOptions.VerifyMode := [];
  SSLOptions.VerifyDepth := 2;
end;
with IdHTTP do begin
  IOHandler := IdSSLIOHandlerSocket1;
  ProxyParams.BasicAuthentication := False;
  Request.UserAgent := 'EmbeddedAnalytics API Interface';
  Request.ContentType := 'text/html';
  request.connection := 'close';
  Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  Request.BasicAuthentication := False;
  Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
  HTTPOptions := [hoForceEncodeParams];
  Request.AcceptEncoding := 'gzip,deflate';
  Request.CustomHeaders.Add('Accept-Language: en-us,en;q=0.5');
  idhttp.Request.CustomHeaders.Add('Authorization: Bearer '+FToken);
end;
idhttp.get(':https://www.googleapis.com/analytics/v3/data/realtime?ids=..........');

Atualização 1 atualize algumas linhas de código para:

SSLOptions.Method := sslvSSLv3;
SSLOptions.SSLVersions := [sslvSSLv3];

Funciona. Vou monitorar e ver se os erros de SSL desaparecem.

Solução Acontece que as alterações feitas no sslVSSLv3 o corrigiram. Não recebo mais os erros! Isso é um tanto surpreendente, visto que a maioria dos outros serviços está adotando o TLS.

questionAnswers(3)

yourAnswerToTheQuestion