Ошибка работы с интернет handshake failed 1с
I'm running a Core 3.1 application in a linux CentOS 7 server which connects to an external SSL-secured API.
The app is running as expected on several Windows development machines but when i run it on an Ubuntu wsl ( openssl v 1.1.1f ) or the CentOS 7 server ( openssl v 1.0.7k ) i get the error SSL Handshake failed, wrong signature.
When i used ssldump and Wireshack to inspect the packets sent through the wire i saw that the server responds with ACK RST.
Reproduction Steps
Create a new Core 3.1 Console app with the following simple code
Because of the test data, the response we expect to get back would be something like
Configuration
- What OS and version, and what distro if applicable?
CentOS 7 with openssl 1.0.7k - Do you know whether it is specific to that configuration?
Was only successful on openssl 1.1.1g
dotnet --info on CentOS server
Other information
The only workarounds i've found so far are to:
The text was updated successfully, but these errors were encountered:
wfurt commented Dec 18, 2020
From the description it seems like the server did not like either the supported protocols or cipher list. Running scanner and seeing ClientHello should give some answers.
Also, can you connect to the server with openssl s_client -connect ip:port ?
cc: @tmds to see if there is recommended packaging solution for Centos 7.
wfurt commented Dec 18, 2020
I did miss the URL in repro code @Pt4r. I will take a look. The site still supports weak ciphers so even OpenSSL 1.0 should be ok IMHO.
wfurt commented Dec 18, 2020
This is what my Centos7 system had. I removed that, and your repro still works for me with OpenSSL 1.0 (and without BasicAuthenticationHeaderValue)
so it seems like this is somehow specific you your setup.
Pt4r commented Dec 22, 2020
@wfurt thank you for troubleshooting this issue!
What eventually made it work was the following:
- Update to openssl 1.1.1g (CentOS 7 didn't seem to mind)
- Create symlink from the local installation of openssl (/usr/local/bin/openss) to the CentOS bin folder (/usr/bin). This seemed to make the nginx service running our app recognize the 1.1.1g openssl and successfully completed the SSL Handshake.
The problem seemed to be that the installation of the 1.1.1g openssl was placed at the /usr/local/bin folder which was not accessible from the nginx user running our app as a service.
Предлагаем разобраться со способами устранения подобных ошибок.
Что такое SSL?
SSL (Secure Socket Layer) — это интернет-протокол для создания зашифрованного соединения между пользователем и сервером, который гарантирует безопасную передачу данных.
Когда пользователь заходит на сайт, браузер запрашивает у сервера информацию о наличии сертификата. Если сертификат установлен, сервер отвечает положительно и отправляет копию SSL-сертификата браузеру. Затем браузер проверяет сертификат, название которого должно совпадать с именем сайта, срок действия сертификата и наличие корневого сертификата, выданного центром сертификации.
Причины возникновения ошибок SSL-соединения
Когда сертификат работает корректно, адресная строка браузера выглядит примерно так:
Но при наличии ошибок она выглядит несколько иначе:
Существует множество причин возникновения таких ошибок. К числу основных можно отнести:
- Некорректную дату и время на устройстве (компьютер, смартфон, планшет и т.д.);
- Ненадежный SSL-сертификат;
- Брандмауэр или антивирус, блокирующие сайт;
- Включенный экспериментальный интернет-протокол QUIC;
- Отсутствие обновлений операционной системы;
- Использование SSL-сертификата устаревшей версии 3.0;
- Появление ошибки «Invalid CSR» при генерации сертификата из панели управления облачного провайдера.
Давайте рассмотрим каждую из них подробнее.
Проблемы с датой и временем
Для исправления этой ошибки достаточно установить на устройстве актуальное время. После этого необходимо перезагрузить страницу или браузер.
Ненадежный SSL-сертификат
Одной из причин появления такой ошибки, как и в предыдущем случае, может стать неправильное время. Однако есть и вторая причина — браузеру не удается проверить цепочку доверия сертификата, потому что не хватает корневого сертификата. Для избавления от такой ошибки необходимо скачать специальный пакет GeoTrust Primary Certification Authority, содержащий корневые сертификаты. После скачивания переходим к установке. Для этого:
- Нажимаем сочетание клавиш Win+R и вводим команду certmgr.msc, жмем «Ок». В Windows откроется центр сертификатов.
- Раскрываем список «Доверенные корневые центры сертификации» слева, выбираем папку «Сертификаты», кликаем по ней правой кнопкой мышки и выбираем «Все задачи — импорт».
- Запустится мастер импорта сертификатов. Жмем «Далее».
- Нажимаем кнопку «Обзор» и указываем загруженный ранее сертификат. Нажимаем «Далее»:
- В следующем диалоговом окне указываем, что сертификаты необходимо поместить в доверенные корневые центры сертификации, и нажимаем «Далее». Импорт должен успешно завершиться.
После вышеперечисленных действий можно перезагрузить устройство и проверить отображение сайта в браузере.
Брандмауэр или антивирус, блокирующие сайт
Некоторые сайты блокируются брандмауэром Windows. Для проверки можно отключить брандмауэр и попробовать зайти на нужный сайт. Если SSL-сертификат начал работать корректно, значит дело в брандмауэре. В браузере Internet Explorer вы можете внести некорректно работающий сайт в список надежных и проблема исчезнет. Однако таким образом вы снизите безопасность своего устройства, так как содержимое сайта может быть небезопасным, а контроль сайта теперь отключен.
Включенный экспериментальный протокол QUIC
QUIC — это новый экспериментальный протокол, который нужен для быстрого подключения к интернету. Основная задача протокола QUIC состоит в поддержке нескольких соединений. Вы можете отключить этот протокол в конфигурации вашего браузера.
Показываем как отключить QUIC на примере браузера Google Chrome:
Этот способ работает и в Windows и в Mac OS.
Отсутствие обновлений операционной системы
Проблемы с SSL-сертификатами могут возникать и из-за того, что на вашей операционной системе давно не устанавливались обновлений. Особенно это касается устаревших версий Windows (7, Vista, XP и более ранние). Установите последние обновления и проверьте работу SSL.
Использование SSL-сертификата версии 3.0
Некоторые сайты используют устаревший SSL-протокол версии 3.0, который не поддерживают браузеры. По крайней мере, по умолчанию. Чтобы браузер поддерживал устаревший SSL необходимо сделать следующее (на примере браузера Google Chrome):
- Откройте браузер и перейдите в раздел «Настройки».
- Прокрутите страницу настроек вниз и нажмите «Дополнительные».
- В разделе «Система» найдите параметр «Настройки прокси-сервера» и кликните на него.
- Откроется окно. Перейдите на вкладку «Дополнительно».
- В этой вкладке вы увидите чекбокс «SSL 3.0».
- Поставьте галочку в чекбоксе, нажмите кнопку «Ок» и перезагрузите браузер.
Ошибки «Invalid CSR» при генерации сертификата из панели управления облачного провайдера
В процессе активации сертификата можно столкнуться с ошибкой «Invalid CSR». Такая ошибка возникает по следующим причинам:
Не подключаются клиенты (linux) к OpenVPN серверу на микротике.
Сертификаты для сервера и клиентов созданы? Сертификат сервера в микротык импортирован? Клиентские сертификаты клиентам розданы? ca.crt и серверу, и клиентам роздан?
Да. Все сертификаты на местах.
А кроме этого ворнинга какая-нибудь еще ругань есть? Микротык в log print что-нибудь говорит?
Если я все правильно понимаю, то клиенту недоступен либо чем-то не нравится ca.crt.
понять бы, чем не нравится..
Может все-таки конфиги покажем?
Микротик настраивался по статье на хабре.
1. Про серверный мы видимо должны догадаться.
2. смотрите что у вас в /etc/openvpn/ca.crt и сравните с серверным
3. Микротик настраивался по статье на хабре. - про которую мы видимо тоже должны догадаться.
ЗЫ Даты на клиенте и сервере все-таки тоже проверьте.
Буквально на днях цеплял еще одного клиента к рабочему ovpn'у. Один момент - клиент на windows. Была точно такая же ошибка, хотя конфиг и все остальное было взято с рабочего клиента. Вопрос решился установкой другой версии openvpn. Скачивал с сайта текущий 2.3.11 - с ним не шло. Поставил 2.3.10 - сразу все подключилось. Что-то они там с SSL в клиенте сделали.
Клиентский конфиг и примеры рабочих корневого и клиентского сертификатов можете скинуть?
Вообще они немного разные, но как минимум ns-cert-type server пробовали раскоментировать?
Клиентский конфиг и примеры рабочих корневого и клиентского сертификатов можете скинуть?
И ключи от квартиры где деньги лежат?
да. результат тот же.
Посмотрите от кого запускается openvpn может ему /etc/openvpn/ca.crt не доступен.
Я и имел ввиду сгенерировать новые, но с теми же параметрами (nsCertType, keyUsage,keyCertSign, authorityKeyIdentifier, и.т.д) как у рабочих.
запускал и от рута и от обычного пользователя.
btw не нулевая вероятность. Сам не сталкивался, но читал про такое.
Хотя больше предполагаю, что проблема была как обычно в самом конфиге (устаревшие/изменившие поведение/добавленные параметры). Вы лог клиента не пробовали читать?
Возможно в самом openvpn (мы же только догадываемся) захаркоден конкретный юзвер:группа, например openvpn:openvpn.
Вообще микротик насколько я слышал, та еще пакость во многих частях. Попробуйте все-таки полностью хотя по одной из инструкций сделать (они реально разные) а у вас если смотреть наискосок вроде как помесь уже.
Как уже выше писал dexpl проблема явно в одном:
Fri Jun 10 21:46:52 2016 TLS_ERROR: BIO read tls_read_plaintext error: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure
Что вы сделали не так, честно говоря я хз. Сливаюсь. Может знатоки микротика подтянуться, не нулевая вероятность что вы совсем не ca.crt выложили или не в том формате.
У меня эта проблема вылезла, после того как обновился openvpn-клиент в федоре. Теперь не могу к серверам на микротиках подключаться. А вот к старому серверу на линуксе вполне ок. Буду разбираться.
Just installed Zeal version: 0.3.1 at my Fedora 25 and I am not able to download any docset.
It is the error message: SSL handshake failed
The text was updated successfully, but these errors were encountered:
GaretJax commented Mar 5, 2017
This happens for me with the official gentoo package. I see no way to influence how Zeal references the openssl binaries though.
trollixx commented Mar 6, 2017
Please run Zeal from the terminal and post its output here.
GaretJax commented Mar 6, 2017
No output is shown.
Note that I had to run it with zeal -f because otherwise it would detach itself from the terminal. In both cases (with and without -f ), no output is shown at all.
GaretJax commented Mar 6, 2017
No output in the logs either (I use journald).
I don't know exactly what it does, but refreshing the docsets list does not raise any errors in the UI.
trollixx commented Mar 7, 2017
Zeal doesn't link to OpenSSL explicitly, instead Qt tries to load it in the runtime. When starting Zeal from the terminal, did you try to download any docset?
Also please check that you do have OpenSSL installed, and Qt is build with OpenSSL support.
turboscholz commented Mar 16, 2017
I have exactly the same problem on Gentoo Linux after installing zeal-0.3.1. No output is printed on the command line when starting zeal (with or without -f argument) and when trying to download any docset.
I have OpenSSL installed in version 1.0.2k and Qt-5.6.2-r1 (in Gentoo it is package dev-qt/qtcore ) has been build with SSL support. I also tried to start zeal with strace ( strace -ozeal.txt zeal ), but the strace output is not taking me any further as there is no hint on an attempt to start an SSL session.
trollixx commented Mar 17, 2017
Did SSL work fine with previous versions of Zeal?
turboscholz commented Mar 17, 2017
I downgraded to version 0.2.1 which is also available in Gentoo. And succeeded: Here the download of a Docset (C++) worked without any issue.
trollixx commented Mar 19, 2017
There's nothing SSL specific in our code. Zeal fully relies on Qt. I believe it's a problem with how your system's Qt is configured and built. Unless other Qt based apps have no issues with SSL, please file a report with maintainers of corresponding packages in your distribution.
grawlinson commented Mar 29, 2017
This just started happening to me on Arch Linux. Running Zeal via command-line doesn't result in any log, unfortunately.
Only thing I can think of is now Arch Linux offers two separate OpenSSL packages ( openssl and openssl-1.0 )
Will investigate later, it's bedtime for me.
grawlinson commented Mar 29, 2017
The SSL handshake issue occurs in 0.3.0 and 0.3.1 but does not occur in 0.2.1 so I have to agree with @trollixx's conclusion in that the issue lies with system Qt.
trollixx commented Mar 30, 2017
@grawlinson I use Arch Linux, and haven't encountered any SSL bugs so far. Zeal 0.3.1 installed from [community] downloads docsets just fine. Perhaps, the recent ca-certificates-utils update could be related if you didn't follow the instructions?
Although, that would just fail the package upgrade, so unrelated.
trollixx commented Mar 30, 2017
Also, on Arch Linux Zeal relies on the openssl-1.0 package
grawlinson commented Mar 30, 2017
Otter Browser doesn't cause any SSL handshake issues, but Zeal is still facing these errors.
Any compilation flags I can pass so I can get some proper debugging going?
This is interesting. AFAIK, there are no special flags for debugging SSL in Qt, it should just print all errors into stderr. Maybe building Zeal in debug mode would enable that.daavve commented Mar 31, 2017
Hi. I was able to get a GDB backtrack at the error location. Apparently the problem is triggered inside the qt5-base package.
Читайте также: