M S*_*kel 6 delphi openssl google-analytics indy
我有一个网络应用程序,它经常向Google AnalyticsAPI调用TIdHTTP(每天大约25,000-50,000).每隔一段时间调用API就会失败并显示主题行中的错误消息(通常不会超过1000次中的1次).我从来没有找到一种模式来实现它.并且重试失败的呼叫通常有效.所以它似乎完全随机.
我有最新版本的openssl(1.0.2.1 - 03/20/2015).最新版本的Indy(源代码文件日期为2015年7月1日).
以下是进行这些调用的基本源代码.
任何人都有任何想法可能是什么?
同时调用API会影响事情(这是在多线程Web应用程序中发生的)吗?
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=..........');
Run Code Online (Sandbox Code Playgroud)
更新1更新一些代码行:
SSLOptions.Method := sslvSSLv3;
SSLOptions.SSLVersions := [sslvSSLv3];
Run Code Online (Sandbox Code Playgroud)
有用.我将监视并查看SSL错误是否消失.
解决方案结果对sslVSSLv3进行了更改修复了它.我不再收到错误!看到大多数其他服务都采用TLS,这有点令人惊讶.
通过改变这个问题解决了
Run Code Online (Sandbox Code Playgroud)SSLOptions.Method := sslvTLSv1_2; SSLOptions.SSLVersions := [sslvTLSv1_2];对此:
Run Code Online (Sandbox Code Playgroud)SSLOptions.Method := sslvSSLv3; SSLOptions.SSLVersions := [sslvSSLv3];
您可能希望尝试使用TLS 1.0,以避免使用SSLv3.
Google和TLS 1.2有两点需要注意.其中一些可能已经改变了.(此讨论非常具体,仅适用于Google服务器和TLS 1.2).
首先,如果使用TLS 1.2和ECDSA,则必须禁用压缩.这个奇怪的事实出现在ECDHE-ECDSA支持下的OpenSSL邮件列表的讨论中.这是它生成的相关支持票证:错误3277:OpenSSL s_client doc缺少选项.
其次,如果您没有使用ChaCha20/Poly1305密码,那么您必须注意TLS 1.2的后备密码套件.我从来没有能够解决这个问题(尤其是因为应该支持所有短暂的DH套件),但我知道它曾经是测试的情况.因此,请确保包含以下内容以进行回退(对于运行IIS 8(或可能是7)及更早版本的Microsoft服务器,也需要这样做):
| 归档时间: |
|
| 查看次数: |
45371 次 |
| 最近记录: |