Mamy bardzo dziwne problemy z połączeniem się z openssl lub curl z jednym z naszych serwerów, od Ubuntu 14.04
Wykonywanie:
openssl s_client -connect ms.icometrix.com:443
daje:
CONNECTED(00000003)
140557262718624:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert
internal error:s23_clnt.c:770:
Podobny błąd podczas wykonywania:
curl https://ms.icometrix.com
curl: (35) error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert
internal error
Dane wyjściowe wersji openssl (na kliencie / serwerze):
OpenSSL 1.0.1f 6 Jan 2014
Dane wyjściowe openssl z dpkg -l openssl:
1.0.1f-1ubuntu2
Zabawne jest to, że problem znika podczas łączenia się z innymi wersjami openssl:
- Z komputera Mac, OpenSSL 0.9.8zd 8 stycznia 2015 r., Wszystko w porządku
- Z centos, OpenSSL 1.0.1e-fips 11 lutego 2013, wszystko w porządku
- Najnowsza stabilna wersja na Ubuntu 14.04, OpenSSL 1.0.2d 9 lipca 2015, wszystko w porządku.
Po stronie serwera nie widzimy nic dziwnego. Problem zaczął się, gdy wyłączyliśmy SSL3 na naszych komputerach.
Czy może występować problem z kompilacją w apt-get?
Testujemy również inne wersje, proponowane przez apt-cache showpkg, ale problem pozostaje ...
curl --sslv3 https://ms.icometrix.com
działaOdpowiedzi:
Wygląda to na problem z obsługą ECDH między klientem a serwerem. Jeśli wykluczysz wszystkie szyfry ECDH, zadziała:
Domyślam się, że serwer wykrzykuje niektóre z 25 krzywych ECC oferowanych przez klienta. Przeglądarki oferują tylko kilka krzywych. OpenSSL 0.9.8 nie obsługuje jeszcze żadnych ECC, a RedHat / CentOS ma historię domyślnego wyłączania ECC z powodów patentowych. Nie wiem, dlaczego OpenSSL 1.0.2 działa, ponieważ nie mam dostępu do tej wersji.
Należy pamiętać, że podanie wersji OpenSSL zwykle nie wystarcza, ponieważ wszystkie dystrybucje zachowują starsze wersje, ale dodają łaty bezpieczeństwa. Zamiast tego sprawdź,
dpkg -l openssl
co daje 1.0.1f-1ubuntu2.15 w moim systemie.źródło