有没有办法在ruby脚本中设置客户端hello?

问题描述:

我写一个脚本独立和this question地址,我遇到的问题,像原来的海报我尝试使用有没有办法在ruby脚本中设置客户端hello?

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

但我有与没有运气。

在其中一个回复中提到您可能可以更改程序来发送不同的客户端问候语。在ruby脚本中可以做到这一点吗?

我目前使用的是ruby 2.0.0-1.9.5,不想更改我的ruby版本。 如果更改客户端hello是不可能的,有没有任何宝石可以帮助解决这个问题?

+1

你是什么意思,“设置客户端你好”? – jww

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

但我有与没有运气。

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


这些是OpenSSL上下文选项。按照Ruby docs,你需要与verify_mode设置它们:

verify_mode

会话验证模式。

有效模式VERIFY_NONEVERIFY_PEERVERIFY_CLIENT_ONCEVERIFY_FAIL_IF_NO_PEER_CERT和OpenSSL的SSL ::


正是在这你可以改变发送程序,其中一个答复提到定义一个不同的客户你好。在ruby脚本中可以做到这一点吗?

有两种类型的ClientHello秒。一个是旧的SSL ClientHello,另一个是TLS ClientHello。由于原始SSL规范没有版本信息,因此很难判断哪些版本正在发送。据我所知,一个特定的字节被检查以确定哪个字节被使用。有些客户端和服务器仍然无法处理好。

据我所知,Ruby有几个OpenSSL方法的选项。从Ruby docs

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

要发送一个ClientHello相当于OpenSSL的SSLv23_method。这提供了最大的兼容性。但是,它启用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)

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