让Indy打电话使用Paypal IPN发布“Poodle”更改

时间:2014-11-01 19:41:07

标签: delphi http ssl indy

我有一个使用PayPal的IPN的网络应用程序。 10月15日,由于Poodle安全漏洞,PayPal做了一些修改: Venture Beat: paypal-says-its-poodle-security-flaw-fix-may-break-the-service-for-some-users-merchants

此时我对https://www.paypal.com/cgi-bin/webscr的调用开始返回 SSL3_READ_BYTES:sslv3警报握手失败

似乎已经修复了php:PHP Fix

我正在寻找解决方案来解决这个问题。我的代码如下:

IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil);
try
  with IdSSLIOHandlerSocket1 do begin
    SSLOptions.Method := sslvSSLv3;
    SSLOptions.Mode :=  sslmUnassigned;
    SSLOptions.VerifyMode := [];
    SSLOptions.VerifyDepth := 2;
  end;
  IdHTTP1 := TIdHTTP.create(nil);
  with IdHTTP1 do begin
    IOHandler := IdSSLIOHandlerSocket1;
    ReadTimeout := 0;
    AllowCookies := True;
    ProxyParams.BasicAuthentication := False;
    ProxyParams.ProxyPort := 0;
    Request.ContentLength := -1;
    Request.ContentRangeEnd := 0;
    Request.ContentRangeStart := 0;
    Request.ContentType := 'text/html';
    Request.Accept := 'text/html, */*';
    Request.BasicAuthentication := False;
    Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
    HTTPOptions := [hoForceEncodeParams];
  end;
  ss := TStringList.Create;
  ss.Add('cmd=_notify-validate');
  for i:= 0 to ARequestInfo.Params.count -1 do begin
    ss.Add(ARequestInfo.Params[i]);
  end;

  mPayPalServer := 'https://www.paypal.com/cgi-bin/webscr';
  mResult := HTTPDecode(IdHTTP1.Post(mPayPalServer, ss));

我已尝试将SSLOptions.Method替换为:

SSLOptions.Method := sslvTLSv1;

但这仍然不起作用。

1 个答案:

答案 0 :(得分:0)

您的代码显式配置SSL处理程序以在此行中使用SSL 3:

SSLOptions.Method := sslvSSLv3;

来自https://stackoverflow.com/a/26513369/80901

  

PayPal禁用SSLv3以响应“POODLE”的可用性。读   在这里:PayPal Response,所以你的Indy客户不会   能够连接。

要进行连接,请检查支持哪些较新的协议(TLS 1.0,1.1或1.2)并配置SSL处理程序以使用此协议。

例如,使用TLS指定允许的TLS版本:

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