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

时间:2014-03-25 19:21:52

标签: ruby openssl open-uri

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

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

但我没有运气。

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

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

1 个答案:

答案 0 :(得分:1)

  

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

     

但我没有运气。

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


这些是OpenSSL上下文选项。根据{{​​3}},您需要使用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 

您希望发送与{1}}对应的ClientHelloSSLv23_methodOpenSSL::SSL::SSL_OP_NO_SSLv2。这提供了最大的兼容性。但是,它启用SSLv2协议及更高版本(SSLv2,SSLv3,TLS1.0,TLS1.1和TLS1.2)

要删除损坏的,弱的和受伤的协议(如SSLv2和SSLv3),您必须设置一些上下文选项。不幸的是,Ruby似乎没有提供{{1}}和其他上下文选项(或者我找不到它们)。请参阅Ruby docs

所以我认为你现在陷入困境。