SSL: SSLV3_ALERT_HANDSHAKE_FAILURE sslv3 предупреждение о сбое квитирования (_ssl.c: 833) - PullRequest
0 голосов
/ 13 июня 2018

У меня есть простой клиент TLS на python, работающий в Ubuntu 18.04 и openssl версии 1.1.0g.Клиент поддерживает один набор шифров.Я получаю сообщение об ошибке при попытке подключиться к серверу TLS 1.0.Набор шифров не поддерживается сервером.Я знаю, что причина ошибки, скорее всего, связана с отсутствием несоответствия шифровальных наборов, но я ищу более значимую ошибку для пользователя в этом случае.Ошибка, которую я получаю в данный момент, указывает на SSLv3, который ни клиент, ни сервер не имеют никакого отношения к SSLv3.Клиент отключает SSLv3 и сервер.Это ошибка:

[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:833) 

Мой вопрос таков: мне нужно более качественное сообщение об ошибке, например, например (отсутствие несоответствия шифровального набора или что-то подобное относится к проблеме шифровального набора).Есть ли?Конечно, я мог написать свое собственное сообщение, но соединение с сокетом может прерваться по разным причинам, и я не могу сделать общую ошибку, которая всегда говорит «несоответствие шифров».

Это клиентский скрипт:

import socket,ssl
import itertools

context = ssl.SSLContext()

context.verify_mode = ssl.CERT_NONE
context.check_hostname = False

ciphers = "ECDHE-ECDSA-AES128-GCM-SHA256"
context.set_ciphers(ciphers)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

domainName = "privatedomain.com"
sslSocket = context.wrap_socket(s, server_hostname = domainName)

try:
    sslSocket.connect((domainName, 443))
except (ssl.SSLError, ssl.SSLEOFError, ssl.CertificateError,ssl.SSLSyscallError, ssl.SSLWantWriteError, ssl.SSLWantReadError,ssl.SSLZeroReturnError) as e:
    print("Error: ",e)
sslSocket.close()

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Поздний ответ, но, надеюсь, полезно.,.

И клиент, и сервер должны согласовать версию транспортного уровня для успешного подключения.Подумайте о встрече с человеком в первый раз.Человек (клиент) протягивает руку вам (серверу) в знак приветствия.Если вы только что видели, как человек вышел из уборной без мытья рук, и вы видите (и / или чувствуете запах) что-то нежелательное, вы не протянете руку взамен.

Это похоже на рукопожатие SSL.Клиент говорит: «Эй, я бы хотел общаться через TLS v1.0».Опытный администратор сервера знает, что TLS v1.0 не является безопасным, и они отключили его на сервере - поэтому сервер отвечает клиенту: «Нет, но как насчет версии 1.3?»(т.е.: «Иди сначала помой руки»).Если клиент принимает (моет руки), рукопожатие принимается и соединение устанавливается.Если клиент отказывается, сервер продолжает запрашивать более низкие версии («Как насчет галлона Purell?») До тех пор, пока клиент не примет или у сервера нет других версий для предложения (уходит).

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

На этой странице есть хорошая таблица версий для клиента и сервера (примерно на полпути вниз в разделе «Контексты SSL»:

 https://docs.python.org/3/library/ssl.html

Обратите внимание, что TLS v1.0 больше не считается безопасным (Google "POODLE attack"). Если ваш сервер поддерживает его, отключите его как можно скорее.

0 голосов
/ 13 июня 2018

С точки зрения клиента, невозможно получить другое сообщение, кроме того, которое было отправлено сервером, а в вашем случае это handshake failure.Например, сообщение об ошибке задокументировано в RFC 2246 7.2.

. Причина, по которой вы видите в своем сообщении SSLv3, заключается в том, что вы, вероятно, отправляете SSLv3 Hello, что разрешеносогласовать протокол TLS 1.0 или более поздней версии.

...