【问题标题】:Ruby http POST request fails for OpenSSL::SSL::SSLError wrong version numberRuby http POST 请求因 OpenSSL::SSL::SSLError 版本号错误而失败
【发布时间】:2023-01-19 00:32:16
【问题描述】:

我的应用程序正在向 API 发送请求,该 API 现在已开始返回 OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=error: wrong version number) 错误。我从 https://www.cdn77.com/tls-test 查到 API 支持 TLS1.2 和 TLS1.3,这是应该的。

我尝试使用http.ssl_version="TLSv1_2" 强制我的应用程序使用 TLS1.2,但我仍然遇到相同的 SSL 错误。

我可以在我的服务器上使用 curl 成功地向该 API 发出请求,但不能使用 Ruby。

我检查了openssl s_client -connect eu2.api.concursolutions.com:443 -tls1_2,看起来没问题。至少它看起来与 openssl s_client -connect us2.api.concursolutions.com:443 -tls1_2 相同,并且我可以从 Ruby 请求该端点。

我在 Rails 控制台中尝试了 http.set_debug_output($stdout),但它无法提供任何有用的信息,只是:

opening connection to eu2.api.concursolutions.com:80...
opened
starting SSL for eu2.api.concursolutions.com:80...
Conn close because of connect error SSL_connect returned=1 errno=0 state=error: wrong version number

任何人有想法尝试什么?来自 curl 和 Postman 的请求正在运行,所以问题必须在我这边。

【问题讨论】:

    标签: ruby ssl openssl


    【解决方案1】:

    为 eu2.api.concursolutions.com:80 启动 SSL...

    这与

    ... openssl s_client -connect eu2.api.concursolutions.com:443

    在您的 ruby​​ 代码中,您访问端口 80,但使用 s_client 您访问端口 443。端口 443 是通常用于 HTTPS 的端口,而 80 用于普通 HTTP。尝试使用 TLS 客户端访问纯 HTTP 会导致您看到的那种奇怪错误。

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 2018-08-14
      • 1970-01-01
      • 2014-05-29
      • 2022-01-07
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      相关资源
      最近更新 更多