SSL handshake_failure после clientHello

Я пытаюсь подключить встроенное устройство к smtp.gmail.com:465, используя tls1.2 с WolfSSL. Библиотека создает и отправляет следующее сообщение clientHello и получает ошибку рукопожатия.

16 03 03 00 4f 01 00 00  4b 03 03 2e 2a ec 85 7f
15 dd 09 5f 22 d1 53 82  60 d7 80 67 28 aa 67 48 
ce f0 71 ab 63 d0 b2 3e  55 3a 05 00 00 14 c0 27 
c0 23 c0 0a c0 09 c0 07  c0 08 c0 14 c0 13 c0 11 
c0 12 01 00 00 0e 00 0d  00 0a 00 08 04 03 02 03 
04 01 02 01

Вот полученное сообщение;

15 03 03 00 02 02 28

Как видно на скриншоте wireshark, следующие комплекты шифров поддерживаются клиентом;

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA (0xc007)
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc008)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
**TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)**
**TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011)**
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012)

... и следующие алгоритмы подписи поддерживаются клиентом (см. шестнадцатеричную часть внизу скриншота, wireshark не декодирует алгоритмы подписи)

04 03: SHA256 EDCSA
02 03: SHA1   EDCSA
04 01: SHA256 RSA
02 01: SHA1   RSA

С другой стороны, smtp.gmail.com поддерживает следующие комплекты шифров; (Это можно получить, запустив скрипт здесь: "superuser.com/questions/109213/how-do-i-list-the-ssl-tls-cipher-suites-a-particular-website-offers")

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
**TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA**
**TLS_ECDHE_RSA_WITH_RC4_128_SHA**
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA

Как видно выше, эти два люкса совпадают.

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_RC4_128_SHA

И я проверил сертификат в "www.digicert.com/help/" (используйте "smtp.gmail.com:465") и получил это: Digicert Screenshot

  • Алгоритм подписи = SHA256 + RSA (отлично)

Это соответствует также

Согласно "tools.ietf.org/html/rfc5246#section-7.2.2"

  Reception of a handshake_failure alert message indicates that the
  sender was unable to negotiate an acceptable set of security
  parameters given the options available.  This is a fatal error.

Насколько я понимаю, существуют другие причины, кроме набора шифров и несоответствия алгоритма подписи для handshake_failure, или я пропускаю что-то очень большое. Я ищу причину сбоя, но не могу найти. Буду благодарен за любую помощь или любую идею. Что может быть причиной handshake_failure?

Я очень сожалею о неприкасаемых ссылках. Stackru не позволяет мне добавить более 2 ссылок. Я заменю их обычными ссылками, когда будет 10 репутаций:)

1 ответ

Я только столкнулся с этим, и я понимаю, что это было давно. Сожалею, что не нашел этого раньше.

Для пользователей, испытывающих это в будущем, однако...

Мне известно о требовании при подключении к серверам Google, которое изменилось за последние 6-9 месяцев. Серверы Google будут напрямую игнорировать любые попытки подключения, если клиентский пакет приветствия не включает поддерживаемое расширение кривых.

Не могли бы вы попробовать добавить эти определения к вашим настройкам по умолчанию при создании библиотеки wolfSSL с намерением подключиться к ЛЮБЫМ серверам Google:

#define HAVE_SUPPORTED_CURVES
#define HAVE_TLS_EXTENSIONS

(Соответствующим параметром конфигурации будет: "--enable-supportcurves", который будет определять оба вышеупомянутых макроса препроцессора)

и загрузите хотя бы одну поддерживаемую кривую в любое клиентское приложение с помощью API:

wolfSSL_UseSupportedCurve(ssl, <CURVE NAME>);

Список поддерживаемых кривых можно найти в разделе комментариев в верхней части (wolfssl-root)/wolfcrypt/src/ecc.c

Другие вопросы по тегам