delphi - idhttp:特定站点上的 SSLv3_READ_BYTES 错误

标签 delphi ssl openssl indy idhttp

我使用 TIdHTTP 来轻松获取请求。大多数情况下它运行良好,但在某些站点上,即使我尝试各种设置也无法建立连接。 我试图遵循 here 的回答

To truly connect to "any" server, you would have to detect a "wrong version" error and retry with a different specific Method/SSLVersions configuration. Unfortunately, the "wrong version" reply does not include the server's actual version, so you have to use trial-and-error. If SSLv23 fails, try TLSv1_2. If that fails, try TLSv1_1. If that fails, try TLSv1. If that fails, try SSLv3.

但这并没有帮助。

异常 - '与 SSL 连接时出错。错误:14094410:SSL 例程:SSL3_READ_BYTES:sslv3 警报握手失败'

或者无法理解的 SSL 例程:SSL3_GET_RECORD:错误的版本号。 但我无法准确解决 SSL3_READ_BYTES:sslv3 警报

重现问题的示例代码和网站示例:

begin
  httpSender := TIdHTTP.Create(nil);
   SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSL.SSLOptions.Method := sslvTLSv1; //or  sslvSSLv3, sslvTLSv1,sslvTLSv1_1

  //or
  //SSL.SSLOptions.Method := sslvSSLv23;
  //SSL.SSLOptions.SSLVersions :=  [sslvSSLv2, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];

  httpSender.IOHandler := SSL;
  //exceptions here
  httpSender.Get('https://www.linux.org/');
  //httpSender.Get('https://st.deviantart.net/');
  //httpSender.Get('https://c.tcdn.co/fa4/aa2/fa4aa23e-f55b-11e6-ba87-040157cdaf01/channel256.png');
end;

那么我应该如何配置 TIdHTTP 来连接这些网站呢?

我使用 Delphi XE8 和 openssl 1.0.1e

最佳答案

您问题中的所有站点都不需要较低的 TLS 协议(protocol)版本。它们都完全能够与 TLS 1.2 通信,有时甚至可以与 TLS 1.3 通信。但是所有这些站点只有在客户端使用 SNI TLS 扩展在 TLS 握手中通告目标主机名时才能工作。

因此,问题更有可能实际上是缺少 SNI 扩展。这似乎是一个已知问题。参见 TIdHTTP and TLS SNI doesnt work了解更多信息和解决问题的方法。

关于delphi - idhttp:特定站点上的 SSLv3_READ_BYTES 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664257/

相关文章:

json - 如何在 Delphi 10.1 berlin 中将嵌套对象转换为 Json

c - Windows 2008R2 CA 和 OpenSSL CSR : Error parsing CSR ASN1 bad value met

ssl - 服务器和客户端证书之间的物理区别是什么?

ssl - 将更新的 PFX 通配符安装到 tomcat keystore 中

windows - 在 Windows 上编译 OpenSSL

Java验证openssl中的数字签名

delphi - Delphi 嵌套类中的 EnumWindows

delphi - 搜索数据后,使DBGrid单元格改变颜色

delphi - 转换Delphi 7代码以与Delphi 2009一起使用

javascript - 带有 IE11+ 的 CORS 拒绝使用 SSL 访问本地主机