【问题标题】:Is there a way to set the client hello in a ruby script?有没有办法在 ruby​​ 脚本中设置客户端问候?
【发布时间】:2014-03-25 19:21:51
【问题描述】:

我正在编写一个独立的脚本,this question 解决了我遇到的问题,就像我尝试使用的原始海报一样

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

但我没有运气。

其中一个回复中提到您可以更改程序以发送不同的客户端问候。是否可以在 ruby​​ 脚本中执行此操作?

我目前正在使用 ruby​​ 2.0.0-1.9.5 并且不想更改我的 ruby​​ 版本。 如果无法更改客户端问候语,是否有任何宝石可以帮助解决此问题?

【问题讨论】:

  • “设置客户端问候”到底是什么意思?

标签: ruby openssl open-uri


【解决方案1】:

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

但我没有运气。

这似乎没有任何意义。您似乎将VERIFY_NONE 分配给VERIFY_PEER。这些是 OpenSSL 常量,而不是变量。所以你不能那样做。


这些是 OpenSSL 上下文选项。根据Ruby docs,需要设置成verify_mode

验证模式

会话验证模式。

有效模式为VERIFY_NONEVERIFY_PEERVERIFY_CLIENT_ONCEVERIFY_FAIL_IF_NO_PEER_CERT 并在 OpenSSL::SSL 上定义


其中一个回复中提到您可以更改程序以发送不同的客户端问候。是否可以在 ruby​​ 脚本中执行此操作?

ClientHellos 有两种类型。一个是旧的 SSL ClientHello,另一个是 TLS ClientHello。因为最初的 SSL 规范没有版本信息,所以很难判断发送的是哪个。据我了解,检查特定字节以判断使用了哪个字节。一些客户端和服务器仍然不能很好地处理它。

据我所知,Ruby 有一些 OpenSSL 方法的选项。来自Ruby docs

new => ctx
new(:TLSv1) => ctx
new("SSLv23_client") => ctx 

您想发送一个对应于 OpenSSL 的 SSLv23_methodClientHello。这提供了最大的兼容性。但是,它启用 SSLv2 及以上协议(SSLv2、SSLv3、TLS1.0、TLS1.1 和 TLS1.2)

要删除损坏、脆弱和受损的协议(如 SSLv2 和 SSLv3),您必须设置一些上下文选项。不幸的是,Ruby 似乎没有提供OpenSSL::SSL::SSL_OP_NO_SSLv2 和其他上下文选项(或者我找不到它们)。见How to set TLS context options in Ruby (like OpenSSL::SSL::SSL_OP_NO_SSLv2)

所以我认为你现在被困住了。

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2022-09-29
    • 2012-02-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多