OpenSSL::SSL::SSLError: SSL_connect SYSCALL 返回=5 errno=0 状态=SSLv3 读取服务器问候 A

2023-12-30

下面的代码产生以下错误: OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A

require 'net/https'
uri = URI.parse("https://<server>.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = 'SSLv3'
http.get(uri.request_uri)

知道为什么吗?我尝试了所有其他问题中提到的所有内容,但仍然没有运气。

  • Ruby 1.9.3p484(2013-11-22 修订版 43786)[x86_64-darwin13.3.0]
  • OpenSSL 0.9.8y 2013 年 2 月 5 日

Update I

尝试了以下方法:

  • Ruby 2.0.0p353(2013-11-22 修订版 43784)[x86_64-darwin13.3.0]
  • OpenSSL 1.0.1i 2014 年 8 月 6 日

更新二

  • 强制 ssl_version 为:TLSv1_2

还是没有运气。

更新三

好吧,这是最终的代码 - 感谢 Steffen(参见下面的答案):

require 'net/https'
uri = URI.parse("https://<server>.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1
http.ciphers = ['RC4-SHA']
http.get(uri.request_uri)

我怀疑我的问题是否与其他人相关,因为它与远程配置错误的服务器有关。


这是服务器站点的问题。看起来服务器只接受 TLS 1.2,并且当客户端请求较小的内容(例如降级或发送 SSL 警报)时不会显示通常的行为,而只是关闭连接。

OpenSSL 0.9.8 不支持 TLS 1.2,并且您的代码还强制执行 SSLv3。仅当升级到 OpenSSL 1.0.1 时,您才能获得 TLS 1.2。

某些浏览器也将无法连接到该服务器,即使它们有办法解决此类损坏的服务器。但是,虽然 Firefox 只会尝试将连接降级到较低的 SSL 版本(这通常会有所帮助),但 Chrome 会设法使用 TLS 1.2 进行连接。

编辑:我已经进一步分析了该问题,现在我无法再与 TLS1.2 建立连接,但我可以与 TLS1.0 或 SSL3.0 建立连接,但前提是密码硬编码为 RC4-SHA。我尝试过其他方法,例如 AES128-SHA 或 DES-CBC3-SHA,但它们不起作用。 因此,虽然它看起来像是一个非常混乱的系统,但显式设置

http.ssl_version = 'TLSv1'       -- or SSLv3, but TLSv1 is better
http.ssl_cipher = 'rc4-sha'

应该管用。我不是 ruby​​ 用户,因此确切的语法可能有所不同,但我已经使用 OpenSSL s_client 进行了测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenSSL::SSL::SSLError: SSL_connect SYSCALL 返回=5 errno=0 状态=SSLv3 读取服务器问候 A 的相关文章

随机推荐

  • 非线性合并后如何恢复线性git历史记录?

    几次提交前 我不小心在我的主分支中进行了非线性合并 我有一个习惯 总是试图保持线性历史 所以现在我想恢复线性 我制作了一个虚拟存储库 它模拟了我所遇到的真实情况 目的是使事情变得更简单 这是它的 GitHub 链接 https github
  • AccountManager 未在 Android N 预览版中添加自定义帐户

    我在我的应用程序中实现了一个同步适配器 它需要在设备帐户设置中添加一个帐户 我遵循 Android 文档中给出的相同方法 它工作正常 直到 Marshmallow 和我可以看到我的帐户列在设备帐户中 但在 Android N 预览版中 帐户
  • 为什么 Visual Studio 2010 在 Boost 1.42.0 中抛出此错误?

    我正在尝试重新编译应用程序 该应用程序在 Visual Studio 2005 和 Visual Studio 2008 中编译良好 警告级别 4 由于错误 如下所示 来自 std tr1 我认为存在一些冲突 但不确定如何修复 我的第一个想
  • gradle错误找不到方法dependencyManagement()

    下面是我的 build gradle buildscript ext springBootVersion 2 0 0 M3 dependencies classpath org springframework boot spring boo
  • 运行 Ansible playbook 时出现 UNREACHABLE 错误

    我确实可以通过 ssh 访问目标计算机 并且它可以工作 但是每当我运行此剧本时 我都会收到以下错误输出 sudo ansible playbook ansible playbook test yml PLAY openstack TASK
  • 如何在 vue bootstrap 中启用悬停下拉菜单?

    div div
  • 事件处理程序为空

    我正在尝试从用户控件引发单击事件并在包含页面上处理它 我遇到的问题是 当我单击用户控件上的按钮 imgstep1 时 imgstep1 click 事件后面的代码会触发 但 btnHandler 事件始终为空 因此它不会调用父事件 对此的任
  • C# 与 C++ 等效的空合并运算符

    C 空合并运算符是否有 C 等效项 我在代码中做了太多空检查 因此正在寻找一种减少空代码量的方法 我刚刚发现这个 这 运算符又名空合并运算符 http dev tricks net the operator aka null coalesc
  • 如果 C 有指针,为什么还需要数组?

    如果我们可以使用指针malloc创建和使用数组 为什么C中存在数组类型 如果我们可以使用指针来代替 那不是没有必要了吗 数组比动态内存分配更快 数组在 编译时 分配 而 malloc 在运行时分配 分配需要时间 另外 C 并没有强制要求ma
  • Java 8方法引用:提供能够提供参数化结果的Supplier

    我想用 java util Optional orElseThrow 具有要求构造函数参数的异常类型 像这样的事情 orElseThrow MyException new someArgument obviously NOT working
  • 从 C 文本文件中读取 int 值

    我有一个包含以下三行的文本文件 12 5 6 4 2 7 9 我可以使用fscanf函数读取前 3 个值并将它们存储在 3 个变量中 但我无法阅读其余部分 我尝试使用fseek函数 但它仅适用于二进制文件 请帮助我将所有值存储在整数变量中
  • 在 C# 中使用“dynamic”关键字无法编译

    我正在尝试编译一段 C 代码 其中包含dynamic关键词 我需要这个关键字来使用ironpython 但是 它无法编译 抱怨 error CS1980 Dynamic keyword requires System Runtime Com
  • 什么是 Nak 限制?

    我试图了解 Android Open Accessory API 如何与 Arduino ADK 板配合使用 我已经能够发送和接收信息 但我只想知道一切是如何工作的 我得到了这个函数的描述 int AndroidAccessory read
  • 错误测试应用内结算示例 - Dungeons

    我正在尝试获取应用程序内计费示例地下城 我有一个带有我的公共 ID 的草稿应用程序 并且我已经发布了非托管项目 potion 001 我在设备上使用与注册商家帐户相同的谷歌帐户 静态测试效果很好 但是当我尝试购买药水时 我得到 DEBUG
  • VBA中的数字上下控制

    vba 中是否有内置的数字 updown 控件 或者我们是否需要创建一个类似的控件 如果有这样的控件那么我们可以使用哪些事件 请建议 您可以使用SpinButton1对此进行控制 SNAPSHOT CODE 您可以设置最小值和最大值Spin
  • 从列表更新选项菜单

    我的 GUI 中有一个 OptionMenu 它由一个列表填充 每次用户运行某个进程时 列表都会更新以反映这一点 有没有办法根据列表更新选项菜单 我试过了self plotWindow update as per 这个问题 https st
  • 如何将现有数据保留在 couchbase 中并且仅更新新数据而不覆盖

    因此 假设我在存储桶下创建了一些记录 文档 并且用户仅更新 RDBMS 中 10 列中的一列 因此我尝试仅发送该一列数据并在 couchbase 中更新它 但问题是 couchbase 会覆盖整个记录并为其余列设置 NULL 一种方法是从
  • 单击 JfreeChart 折线图按钮上的放大和缩小功能?

    基本上我希望线图被放大和缩小 总共4个按钮 2个用于X轴 放大和缩小 另外两个用于Y轴 沿着任何轴单击按钮 就像绘制图形一样在负 x 轴和负 Y 轴区域 根据数据点 然后单击按钮 图形应根据按钮单击沿负 x 轴或负 Y 轴放大和缩小 我怎样
  • 强制应用程序在特定的 .NET 运行时版本下运行?

    我安装了 NET 2 0 运行时 然后安装了 NET 4 0 运行时 所以我两者都有 当我运行 NET 应用程序时 有没有办法强制使用哪个运行时 编辑 澄清 我的意思是不考虑应用程序的构建方式 我假设 NET 4 0 运行时可以运行 5 年
  • OpenSSL::SSL::SSLError: SSL_connect SYSCALL 返回=5 errno=0 状态=SSLv3 读取服务器问候 A

    下面的代码产生以下错误 OpenSSL SSL SSLError SSL connect SYSCALL returned 5 errno 0 state SSLv3 read server hello A require net http