Fatal - Bad Record MAC

200 views
Skip to first unread message

Alex Kluyev

unread,
Jun 7, 2018, 10:08:52 AM6/7/18
to Erlang по-русски
Доброго времени суток, коллеги.
Сегодня наступил на вот такие грабли. Пытаюсь с помощью gun работать с сервером по websocket. Но выявилась такая неожиданная проблема с ssl.
TLS client: In state cipher received SERVER ALERT: Fatal - Bad Record MAC
Версия erlang 20.3.2

Из вменяемого удалось нарыть только https://bugs.erlang.org/browse/ERL-538

Может у кого-то есть мысли как не меняя версию erlang порешать эту проблему?

PS. Из того же нарытого в сети - часто жалуются на cloudflare

Danil A. Zagoskin

unread,
Jun 7, 2018, 10:22:10 AM6/7/18
to Erlang по-русски
Воспроизвел то же самое, подключившись TLS-клиентом к plain-HTTP-серверу:
> ssl:connect("localhost", 8080, []).
{error,{tls_alert,"bad record mac"}}

Проверь, что идешь на шифрованный порт (или используй нешифрованный websocket с нешифрованным сервером).
Wireshark в помощь (для диагностики некоторых очевидных проблем понимание протокола не нужно)

--
Вы получили это сообщение, поскольку подписаны на группу "Erlang по-русски".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russian+unsubscribe@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-russian@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Алексей Клюев

unread,
Jun 7, 2018, 10:51:56 AM6/7/18
to erlang-...@googlegroups.com
Еще раз перепроверил. Даже wireshark-ом послушал. Увы. После отправки TLSv1.2 "Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message" сервер отвечает TLSv1.2 "Alert (Level: Fatal, Description: Bad Record MAC)"

Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-...@googlegroups.com.

Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Danil A. Zagoskin

unread,
Jun 7, 2018, 1:27:57 PM6/7/18
to Erlang по-русски
Что на том конце? Можешь ли ты туда подключиться s_client'ом?
openssl s_client -tls1_2 -connect yandex.ru:443

Пробовал ли свежий эрланг (20.3.7 или 21rc2)? Там что-то чинили недавно про это.

Попробуй передать что-нибудь класическое из ssl:cipher_suites() в опции ciphers к ssl:connect.
Для простоты — тот же Cipher, что выбрал s_client (найди соответствующий тюпл).
Например, {ciphers, [{ecdhe_rsa,aes_128_cbc,sha256,sha256}]}:

ssl:connect("yandex.ru", 443, [{ciphers, [{ecdhe_rsa,aes_128_cbc,sha256,sha256}]}]).
(подставить твои хост-порт).

Alex Kluyev

unread,
Jun 13, 2018, 12:55:08 PM6/13/18
to Erlang по-русски
Итого. В 20-ой версии эрланга не получится работать по https с серверами cloudflare (по крайней мере без гемороя). Cipher *CHACHA20* - не работает. Разрабы написали что в 21 уберут их вообще, а пока так как есть.

четверг, 7 июня 2018 г., 17:08:52 UTC+3 пользователь Alex Kluyev написал:
Reply all
Reply to author
Forward
0 new messages