2015-05-04 2 views
3

Обновление: Многие из моих проблем связаны с тем, что вы не знаете, как отправить сертификат клиента. Я разместил их details over here.Использовать шифр клиента TLS_RSA_WITH_AES_256_CBC_SHA256

Я использую Ruby для подключения к серверу SSL, который поддерживает только шифр . Мне также нужно предоставить сертификат клиента.

Когда я смотрю доступные шифры от OpenSSL::Cipher.ciphers, TLS_RSA_WITH_AES_256_CBC_SHA256 не указан в качестве опции.

Как добавить этот шифр к доступным шифрам?

Спасибо!

Вот мой код:

http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 
    http.cert = OpenSSL::X509::Certificate.new(File.read("my.cer")) 
    http.ca_file = 'their_root.cer' 
    http.ciphers = ['AES256-SHA256'] 
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER 
    http.ssl_version = :SSLv23 
    request = Net::HTTP::Post.new(uri.request_uri) 
    request.body = my_xml 
    response = http.request(request) 

Ошибка я получаю:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert handshake failure 

Проверка пакетов показывает, что сервер прекращает работу с сообщением «Ошибка Рукопожатие (40)», который, как представляется, проблема шифрования.

Я не подключается из командной строки, но вот результаты OpenSSL s_client:

$ openssl s_client -connect dir-staging.surescripts.net:443 -tls1 -servername dir-staging.surescripts.net 
CONNECTED(00000003) 
depth=2 /C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Root Certification Authority 
verify error:num=19:self signed certificate in certificate chain 
verify return:0 
14089:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40 
14089:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566: 
+0

Я пытаюсь подключиться к существующей частной службе и просто не могу заставить SSL настроить его работу. –

+0

Отредактировал мой ответ, но сейчас это 2 вопроса. – steenslag

+0

@steenslag Я не могу понять, является ли проблема шифром или чем-то еще. jww указал на некоторые проблемы с командной строкой openssl, но радости пока нет. –

ответ

1

Согласно openssl, это также называют "AES256-SHA256". Согласно Ruby lang, AES256-SHA256 считается небезопасным и, следовательно, отключен. Ссылка содержит «патч» для повторного включения ненадежных шифров.

Возможно, вам понадобится обратиться к специалисту по безопасности за информацией о рисках, связанных с вашей организацией.

(Изменить) Ошибка «самоподписанный сертификат в цепочке сертификатов» должна быть taken care.

+0

Я знаю, что вы всего лишь посланник, но ... Нет ничего плохого в AES256-SHA256. POODLE был CSRF против пользовательских агентов, таких как браузер. (Браузеры, как известно, небезопасны из-за их модели безопасности и принципов проектирования). Другие пользовательские агенты * не * восприимчивы. Вы можете найти хорошее обсуждение этого вопроса в рабочей группе TKS [Rethink TLS 1.3] (https://www.ietf.org/mail-archive/web/tls/current/msg14704.html). И Ruby позволяет RC4, который, как мы знаем, слабый и раненый. Это похоже на больше ошибок безопасности Ruby. – jww

0

Когда я смотрю доступные шифры от OpenSSL::Cipher.ciphers, TLS_RSA_WITH_AES_256_CBC_SHA256 не указан в качестве опции.

Следующая команда OpenSSL перечислит соответствующие шифры для вас:

$ openssl ciphers -v 'ALL:!RC4:!MD5:!aNULL' | grep AES256 | grep SHA256`. 

Результаты:

DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH  Au=RSA Enc=AES(256) Mac=SHA256 
DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH  Au=DSS Enc=AES(256) Mac=SHA256 
DH-RSA-AES256-SHA256 TLSv1.2 Kx=DH/RSA Au=DH Enc=AES(256) Mac=SHA256 
DH-DSS-AES256-SHA256 TLSv1.2 Kx=DH/DSS Au=DH Enc=AES(256) Mac=SHA256 
AES256-SHA256   TLSv1.2 Kx=RSA  Au=RSA Enc=AES(256) Mac=SHA256 

на основе Is it possible to enable TLS v1.2 in Ruby? If so, how?, вы должны в следующем попытаться изменить следующим образом:

http.ssl_version = :SSLv23 

Для:

ctx = OpenSSL::SSL::SSLContext.new 
ctx.ssl_version = :TLSv1_2 

Как я могу добавить этот шифр доступных шифров?

основе Edit на ваш вопрос:

$ openssl s_client -connect dir-staging.surescripts.net:443 -tls1 -servername dir-staging.surescripts.net 

14089:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40 
14089:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566: 

OpenSSL 0.9.8 делает не поддержки TLS 1.2. Вы должны перейти на OpenSSL 1.0.0 или выше. OpenSSL 1.0.2 является последним, и вам предлагается использовать его.

+0

Я обновил openssl и перезапустил эту команду: https://gist.github.com/tomrossi7/030f95513390edce3042 Я также обновил свой код: https://gist.github.com/tomrossi7/3c8d564fedfd22249b3c. Все еще не может пройти, чтобы пройти через –

+0

Проверьте эти gists. К сожалению, у меня нет контроля над этим сервером, и он заблокирован IP. –

+0

@Tom - это похоже на проблему, связанную с сервером или его конфигурацией. Вы можете подключиться, выполнить обмен ключами, а затем получить мастер-ключ. Затем вы необъяснимо получаете предупреждение 40. Им нужен сертификат клиента? – jww

Смежные вопросы