ошибка openssl/curl: SSL23_GET_SERVER_HELLO:tlsv1 предупреждение внутренняя ошибка

ошибка openssl/curl: SSL23_GET_SERVER_HELLO:tlsv1 предупреждение внутренняя ошибка

Мы столкнулись с очень странными проблемами при подключении к одному из наших серверов с помощью openssl или curl из Ubuntu 14.04.

Выполнение:

openssl s_client -connect ms.icometrix.com:443

дает:

CONNECTED(00000003)
140557262718624:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert
internal error:s23_clnt.c:770:

Аналогичная ошибка при выполнении:

curl https://ms.icometrix.com
curl: (35) error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert
internal error

Вывод версии openssl (на клиенте/сервере):

OpenSSL 1.0.1f 6 Jan 2014

Вывод openssl из dpkg -l openssl:

1.0.1f-1ubuntu2

Самое забавное, что проблема исчезает при подключении к другим версиям Openssl:

  • С Mac, OpenSSL 0.9.8zd 8 января 2015, все ок
  • Из centos, OpenSSL 1.0.1e-fips 11 февраля 2013, все ок
  • Последняя стабильная версия Ubuntu 14.04, OpenSSL 1.0.2d от 9 июля 2015 г., все в порядке.

Со стороны сервера мы не видим ничего странного. Проблема началась, когда мы отключили SSL3 на наших машинах.

Может ли быть проблема со сборкой в ​​apt-get?

Мы также тестируем другие версии, предложенные apt-cache showpkg, но проблема остается...

решение1

Похоже, проблема с поддержкой ECDH между клиентом и сервером. Если исключить все шифры ECDH, то все работает:

openssl s_client -connect ms.icometrix.com:443 -cipher 'DEFAULT:!ECDH'

Я предполагаю, что сервер зависает на некоторых из 25 кривых ECC, предлагаемых клиентом. Браузеры предлагают только несколько кривых. OpenSSL 0.9.8 пока не поддерживает ECC, а RedHat/CentOS имеет историю отключения ECC по умолчанию по патентным причинам. Я не знаю, почему работает OpenSSL 1.0.2, так как у меня нет доступа к этой версии.

Обратите внимание, что указание версии OpenSSL обычно недостаточно, поскольку все дистрибутивы сохраняют старые версии, но добавляют исправления безопасности. Вместо этого проверьте, dpkg -l opensslчто дает 1.0.1f-1ubuntu2.15 на моей системе.

Связанный контент