SSL连接错误

3
我试图使用get请求连接到此URL:政府页面,但始终收到EIdOSSLConnectError "Error connecting with SSL"的错误提示。我的代码如下,它可以在其他页面正常运行,但在这个页面上无法正常工作。
IdHTTP1.HandleRedirects := true;
IdHTTP1.AllowCookies := true;
IdHTTP1.IOHandler := TIdSSLIOHandlerSocket.Create(IdHTTP1);
IdHTTP1.CookieManager := TIdCookieManager.Create(IdHTTP1);
with TIdSSLIOHandlerSocket(IdHTTP1.IOHandler) do begin
  SSLOptions.Method := sslvTLSv1;
  SSLOptions.Mode := sslmUnassigned;
  SSLOptions.VerifyMode := [];
  SSLOptions.VerifyDepth := 0;
  PassThrough := True;
end;
IdHttp1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0';
IdHTTP1.RedirectMaximum := 30;
sHtml := IdHTTP1.Get('https://loginc.mat.sat.gob.mx/nidp/app/login?id=XACCertiSAT&sid=0&option=credential&sid=0');//<----Error here

Delphi 7,Indy 9.00.10

感谢任何建议。


4
您正在使用极为古老的 Indy 9 版本(最后一个版本是 9.0.50)。Indy 9 需要使用定制的(旧版)OpenSSL DLL,不支持现代的 OpenSSL 版本。请升级到 Indy 10,并使用最新的官方 OpenSSL 1.0.2 DLL,您可以从 Indy 的 Fulgan 镜像 获取。 - Remy Lebeau
你的 RedirectMaximum 值似乎期望在整个宇宙范围内进行重定向(42 是宇宙能接受的最大值 :) - Victoria
我已经更新到10.6.2.0版本,现在出现了这个错误:"Error connecting with SSL error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure"。 - crono81
感谢Remy Lebeau的更新,问题是,正如Bob3411所提到的那样,SSLOptions.Method := sslvTLSv1;更改为SSLOptions.Method := sslvSSLv23;并且使用openssl dll openssl-1.0.2-i386-win32.zip,openssl-1.0.2-x64_86-win64.zip也不起作用。Victoria,我使用了30个重定向,因为我不知道会重定向多少次:p。离题了,Remy,您是否安装了带有indy 10的reportmanager 2_7?谢谢大家。 - crono81
不要直接使用SSLOptions.Method属性(它已被弃用,所以假装它不存在),请改用SSLOptions.SSLVersions属性。如果您启用了多个版本(例如[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]),则Method将自动设置为sslvSSLv23(但这是一个实现细节)。将Method设置为sslvSSLv23与将SSLVersions设置为[sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]相同。 - Remy Lebeau
我明白了,我会改变它。 - crono81
1个回答

1

看起来该网站需要TLS v1.2,因为当我使用浏览器访问时,就会协商TLS v1.2。

此外,如果我在我的PaleMoon浏览器中接下来进入about:config,并将名为security.tls.version.max的pref设置为1,然后重新访问您的URL,则会使用TLS v1.0,导致出现以下错误: Secure Connection Failed An error occurred during a connection to loginc.mat.sat.gob.mx. Cannot communicate securely with peer: no common encryption algorithm(s). (Error code: ssl_error_no_cypher_overlap)

然而,我尝试过其他一些网站(如银行),它们仍然可以使用设置为TLS v1的方式正常工作。看起来您的目标站点有点挑剔,所以建议您尝试调整以下代码行: SSLOptions.Method := sslvTLSv1;


这个网站说:您的客户正在使用TLS 1.0,这是非常老旧的版本,可能容易受到BEAST攻击,并且没有最好的密码套件可用。像AES-GCM和SHA256这样的加密方式无法在TLS 1.0客户端上使用,还有许多更现代的密码套件也不可用。https://www.howsmyssl.com/ - Bob3411

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接