“1408F10B: SSL-Routinen: SSL3_GET_RECORD: Aufrufen der falschen Versionsnummer:” auf Indy
Ich habe eine Web-App, die häufig macht TIdHTTP ruft die Google Analytics-API auf (ca. 25.000 bis 50.000 pro Tag). Von Zeit zu Zeit schlagen Aufrufe der API mit der Fehlermeldung in der Betreffzeile fehl (nicht oft - weniger als 1 von 1000 Mal). Ich habe noch nie ein Muster gefunden, um es zu verwirklichen. Und das Wiederholen des fehlgeschlagenen Anrufs funktioniert normalerweise. Es scheint also völlig zufällig zu sein.
Ich habe die neueste Version von openssl (1.0.2.1 - 20.03.2015). Und die neueste Version von Indy (Quellcode-Dateien vom 01.07.2015).
Below ist der grundlegende Quellcode für diese Aufrufe.
Hat jemand eine Idee woran es liegen könnte?
Würden sich zwei gleichzeitige Aufrufe der API auf die Dinge auswirken (dies geschieht in einer Multithread-Webanwendung)?
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=..........');
Update 1 Aktualisiere einige Codezeilen auf:
SSLOptions.Method := sslvSSLv3;
SSLOptions.SSLVersions := [sslvSSLv3];
Es klappt. Ich werde überprüfen, ob SSL-Fehler behoben sind.
Lösun Es stellte sich heraus, dass die Änderungen an sslVSSLv3 behoben wurden. Ich bekomme die Fehler nicht mehr! Dies ist etwas überraschend, da die meisten anderen Dienste stattdessen TLS verwenden.