Есть ли способ установить приветствие клиента в скрипте ruby?

Я пишу автономный скрипт и этот вопрос решает проблему, с которой я столкнулся, и, как и оригинальный плакат, который я пытался использовать

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

Но мне с этим не повезло.

В одном из ответов упоминается, что вы можете изменить программу, чтобы отправить приветствие другому клиенту. Можно ли это сделать в рубиновом скрипте?

В настоящее время я использую ruby ​​​​2.0.0-1.9.5 и не хочу менять свою версию ruby. Если изменение клиентского приветствия невозможно, есть ли какие-либо драгоценные камни, которые помогают решить эту проблему?


person jmarcs    schedule 25.03.2014    source источник
comment
Что именно вы подразумеваете под установкой приветствия клиента?   -  person jww    schedule 26.03.2014


Ответы (1)


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

Но мне с этим не повезло.

Кажется, это не имеет никакого смысла. Похоже, вы назначаете VERIFY_NONE VERIFY_PEER. Это константы OpenSSL, а не переменные. Так что вы не можете этого сделать.


Это параметры контекста OpenSSL. Согласно документации Ruby, вам нужно установить их с помощью verify_mode:

проверить_режим

Режим проверки сеанса.

Допустимые режимы: VERIFY_NONE, VERIFY_PEER, VERIFY_CLIENT_ONCE, VERIFY_FAIL_IF_NO_PEER_CERT, определенные в OpenSSL::SSL.


В одном из ответов упоминается, что вы можете изменить программу, чтобы отправить приветствие другому клиенту. Можно ли это сделать в рубиновом скрипте?

Есть два типа ClientHellos. Один — это старый SSL ClientHello, а другой — TLS ClientHello. Поскольку исходная спецификация SSL не содержала информации о версии, было трудно определить, какая версия была отправлена. Насколько я понимаю, проверяется конкретный байт, чтобы определить, какой из них используется. Некоторые клиенты и серверы по-прежнему не справляются с этим.

Насколько мне известно, в Ruby есть несколько опций для метода OpenSSL. Из документов по Ruby:

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

Вы хотите отправить ClientHello, который соответствует SSLv23_method OpenSSL. Это обеспечивает максимальную совместимость. Однако он включает протокол SSLv2 и выше (SSLv2, SSLv3, TLS1.0, TLS1.1 и TLS1.2).

Чтобы удалить сломанные, слабые и поврежденные протоколы (такие как SSLv2 и SSLv3), вы должны установить некоторые параметры контекста. К сожалению, Ruby не предлагает OpenSSL::SSL::SSL_OP_NO_SSLv2 и другие параметры контекста (или я не смог их найти). См. Как установить параметры контекста TLS в Ruby (например, OpenSSL::SSL::SSL_OP_NO_SSLv2)< /а>.

Так что я думаю, что вы застряли в данный момент.

person jww    schedule 25.03.2014