Ssl handshake failed что за ошибка на телевизоре
Мой метод из моего класса Action, который отправляет данные на сервер
Впервые я подумал, что это проблема с сертификатом, я преобразовал ее из .pfx в .jks, но у меня такая же ошибка, без изменений.
Сбой рукопожатия мог произойти по различным причинам:
Поскольку основной отказ нельзя определить, лучше включить cacerts флаг, чтобы включить отладку установленного SSL-соединения. После включения отладки вы можете определить, какая активность в рукопожатии не удалась.
Обновить
Добавление сертификата сервера, выдающего ЦС в это хранилище доверия, должно решить проблему. Вы можете обратиться к моему ответу по соответствующему вопросу о получении инструментов для этой цели, но для этого достаточно утилиты Java keytool .
Предупреждение. Хранилище доверия - это, по сути, список всех доверенных центров, которым вы доверяете. Если вы введете сертификат, который не принадлежит CA, которому вы не доверяете, тогда соединения SSL / TLS с сайтами, имеющими сертификаты, выпущенные этим объектом, могут быть дешифрованы, если доступен закрытый ключ.
Обновление № 2: Понимание вывода трассы JSSE
Хранилище ключей и доверительные хранилища, используемые JVM, обычно перечисляются в самом начале, что несколько напоминает следующее:
Если используется неверный доверительный сервер, вам необходимо повторно импортировать сертификат сервера в нужное место или перенастроить сервер на использование указанного (не рекомендуется, если у вас несколько JVM, и все они используются для разных необходимо).
Если вы хотите проверить, содержит ли список сертификатов доверия требуемые сертификаты, то есть раздел для того же самого, который начинается с:
Вам нужно будет искать, если CA сервера является предметом.
Процесс Рукопожатия будет иметь несколько записей заметных (вы должны знать , SSL , чтобы понять их подробно, но для целей отладки текущей проблемы, достаточно знать , что *** ClientHello , TLSv1 RandomCookie : GMT : 1291302508 байт = < некоторый байт массива >сеанса ID : <> Шифр Suites : [ SSL_RSA_WITH_RC4_128_MD5 , SSL_RSA_WITH_RC4_128_SHA , TLS_RSA_WITH_AES_128_CBC_SHA , TLS_DHE_RSA_WITH_AES_128_CBC_SHA , TLS_DHE_DSS_WITH_AES_128_CBC_SHA , SSL_RSA_WITH_3DES_EDE_CBC_SHA , SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA , SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA , SSL_RSA_WITH_DES_CBC_SHA , SSL_DHE_RSA_WITH_DES_CBC_SHA , SSL_DHE_DSS_WITH_DES_CBC_SHA , SSL_RSA_EXPORT_WITH_RC4_40_MD5 , SSL_RSA_EXPORT_WITH_DES40_CBC_SHA , SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA , SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA ] Компрессионные методы : < 0 >*** обычно сообщается в ServerHello.
1. ClientHello
Обратите внимание на используемые шифра. Это , возможно , придется согласиться с записью в файле merchant.properties, по той же конвенции могут быть использованы библиотекой банка. Если используемое соглашение отличается от других, нет никаких причин для беспокойства, поскольку ServerHello будет указывать так, если набор шифров несовместим.
2. ServerHello
Сервер отвечает сервером ServerHello, который укажет, может ли быть установлена ??настройка соединения. Записи в журналах обычно имеют следующий тип:
Обратите внимание на набор шифров, который он выбрал; это лучший набор, доступный как для сервера, так и для клиента. Обычно набор шифров не указан, если есть ошибка. Сертификат сервера (и, необязательно, целая цепочка) отправляется сервером и будет найден в записях как:
Если проверка сертификата прошла успешно, вы найдете запись, аналогичную:
Исправлена ??ошибка: запретить кодировку RC4
RC4 теперь рассматривается как скомпрометированный шифр.
Списки шифрования RC4 были удалены из списка списков шифрования handshake_failure по умолчанию для клиента и сервера в реализации Oracle JSSE. Эти комплекты шифрования по-прежнему можно включить с помощью handshake_failure и enabled методов. См. JDK-8077109 (не публичный).
Если ваш сервер имеет сильное предпочтение для этого шифрования (или использует только этот шифр), это может вызвать handshake_failure java.
Вы можете протестировать подключение к серверу с помощью шифров RC4 (во-первых, попробуйте без enabled аргументов, чтобы увидеть, запускаются ли триггеры a handshake_failure , а затем установите enabled :
Установка расширения Java Cryptography Extension (JCE) Unlimited Strength ( для JDK7 | для JDK8 ) исправит эту ошибку. Разархивируйте файл и следуйте readme, чтобы установить его.
Это также может случиться, когда клиент должен предоставить сертификат. После того, как сервер перечислит цепочку сертификатов, может случиться следующее:
3. Запрос сертификата . Сервер выдаст запрос клиента клиенту. В запросе будут перечислены все сертификаты, которые сервер принимает.
4. Цепочка сертификатов клиента Это сертификат, который клиент отправляет на сервер.
Если в цепочке нет сертификата, а серверу требуется один, вы получите ошибку рукопожатия. Вероятная причина - путь к вашему сертификату не найден.
5. Проверка сертификата . Клиент просит сервер проверить сертификат.
Этот шаг произойдет, только если вы отправляете сертификат.
6. Закончено . Сервер ответит на запрос проверки
Ошибка рукопожатия может быть ошибкой реализации протокола TLSv1.
В нашем случае это помогло с java 7:
Jvm будет вести переговоры в этом порядке. Серверы с последним обновлением будут делать 1,2, багги будут идти до v1 и это работает с аналогичным v1 в java 7.
Отладка интернет-соединения
Прежде всего стоит использовать альтернативную точку доступа: подключиться к Wi-Fi, если у вас мобильный интернет, или наоборот – отключиться от стационарной точки доступа и использовать сотового оператора.
Попробуйте загрузить другой веб-сайт. Возможно, проблема не в вашем подключении, а в неполадках на стороне провайдера или самого сайта. Если это так, проблему скорее всего уже решают, так как ошибки при соединении в этом случае будут не у вас одного.
Иногда после очередного обновления в работе приложения могут наблюдаться сбои. В этом случае стоит попробовать полностью сбросить сетевые настройки.
Дата и время как виновники всех проблем
В современных гаджетах многие приложения (в особенности сетевые программы) синхронизируются с часами. Любая манипуляция с текущей датой приводит к ошибкам приложения. Об ошибочной дате может сообщить сам гаджет: он попросит перевести часы в соответствие с текущим временем.
Всегда обновляйте устаревшие приложения
Ошибка SSL-подключения может возникать и при долгом отсутствии обновлений. Связано это с просроченным сертификатом текущей программы, так как действие сертификатов ограничено из целей безопасности.
Чтобы обновить текущий софт на смартфоне, необходимо:
Проводите регулярную очистку кэша в браузере
При обновлении софта нередко остаются кэшированные данные, которые мешают корректно обрабатывать текущие страницы сайта, из-за чего возникают ошибки с сертификатом.
Чтобы очистить кэш, можно использовать внутренние настройки самого браузера либо универсальную утилиту для очистки системы Android.
Для чистки кеша необходимо:
Антивирус мешает корректной работе в сети
Хоть антивирус и предназначен для поиска уязвимостей в системе и предотвращения несанкционированного доступа в систему, он может блокировать и текущее подключение к сети, выдавая SSL-ошибку. Есть вероятность, что в эту самую минуту он отражает атаку, поэтому ошибке стоит уделить особое внимание и отключиться от текущей сети, особенно если вы используете публичную точку доступа.
Полное восстановление устройства из бэкапа
Знайте, что иногда восстановить смартфон в первоначальное состояние куда проще, чем искать виновника проблем. Если ничего не помогло и вы решились на кардинальные меры, необходимо:
Нетрудно догадаться, что все ваши личные данные будут утеряны безвозвратно. Поэтому рекомендуется использовать резервную копию данных контактов и заметок. Если при первой настройке вы соглашались резервировать свои данные в Google-облако, то после сброса до заводского состояния используйте свой аккаунт для восстановления данных.
Однако это не распространяется на фото, видео и музыкальные файлы, поэтому перед форматированием скопируйте мультимедиа с памяти устройства на свой компьютер.
Техническая оптимизация — основа основ в продвижении сайта. Если у вашего ресурса есть проблемы с безопасностью и защитой данных, вам будет очень сложно двигаться в ТОП выдачи.
Технология SSL/TLS и ее роль в безопасности сайта
SSL была представлена в 1995 году и обновлена до TLS в 1999-м — технология видоизменялась, реагируя на новые уязвимости. Протоколы постоянно обновляются и большинство их предыдущих версий считаются устаревшими. Важно следить за обновлениями и использовать самую актуальную версию SSL/TLS.
Как SSL/TLS влияет на продвижение
Большинство браузеров маркируют незащищенные страницы — проверить безопасность соединения можно по значку замка в адресной строке. Safari показывает этот значок, только если сайт использует адекватное шифрование; Firefox показывает перечеркнутый замок при недостаточном уровне защиты на сайтах, которые используют пользовательские данные; Chrome показывает красный треугольник при проблемах с безопасностью и значок замка при безопасном соединении.
Информация о безопасности подключения в Chrome
Как исправлять типичные ошибки SSL/TLS
1. Недействительный сертификат
Информация о дате истечения действия сертификата доступна в браузере:
Поэтому стоит знать дату истечения действия сертификата и вовремя его обновлять. Помогут вам в этом автоматизированные решения типа Let’s Encrypt, AWS Certificate Manager, Yandex Certificate Manager. Также существуют инструменты, которые несколько раз оповещают вас перед окончанием срока действия сертификата. Иногда и вовсе ничего делать не нужно, ведь многие центры сертификации предлагают автоматическое обновление.
Если вы все же оказались в ситуации недействительного сертификата, нужно вручную его обновить или приобрести новый. Что именно нужно сделать:
- Выбрать тип сертификата. Большинство центров сертификации предлагает несколько вариантов, покрывающих потребности сайтов разного масштаба. Если вы только обновляете существующий сертификат и не хотите поменять его тип, этот шаг у вас уже выполнен (иногда логично переключиться на более мощный тип сертификата — например, приобрести Wildcard-сертификат, если у вашего сайта появились поддомены). Покупая новый сертификат, внимательно проверяйте авторитетность производителя. Вы можете настроить CAA-запись, чтобы ограничить круг удостоверяющих центров, имеющих право выпускать сертификаты для вашего домена. Среди самых популярных центров сертификации — GlobalSign, Digicert, Sectigo, Thawte.
- Сгенерировать запрос на получение сертификата. После покупки нужно сгенерировать CSR (certificate signing request) у хостинг-провайдера. В результате вы получите файл ключа и сам запрос для загрузки в настройках сертификата.
- Активировать и валидировать сертификат. Далее нужно подтвердить свои права на домен через email, CNAME-запись или подтверждающий файл. Как и в предыдущем процессе, особенности настройки зависят от выбранного провайдера.
- Проверить корректность работы сертификата. После установки сертификата проверьте его с помощью онлайн-инструмента. Например:
Рекомендуем использовать инструменты мониторинга и настраивать напоминания об окончании срока действия — так вам не придется разбираться с последствиями, если срок действия сертификата истечет.
2. Устаревшая версия протокола безопасности
Технологии шифрования совершенствуются, но и хакерские атаки становятся все изощреннее. Постоянно растущие риски — одна из причин сокращения срока действия SSL-/TLS-сертификатов и обновления протокола.
Протокол TLS был представлен как апгрейд SSL (версии 3.0 на тот момент), поэтому любая версия TLS более безопасна чем SSL. Самый актуальный протокол — TLS 1.3, выпущенный в 2018 году, — имеет усовершенствованный криптографический алгоритм и позволяет браузеру быстрее подсоединиться к серверу сайта. С 2020 года все основные браузеры не поддерживают устаревшие версии TLS (1.0 и 1.1), а значит не пускают пользователей на сайты, использующие эти версии.
Важно использовать актуальную версию протокола безопасности и отключать все предыдущие версии. Существует несколько способов проверить, какой протокол у сайта:
- В онлайн-инструментах, проверяющих, какие версии TLS и SSL включены на сайте. Например:
Чтобы включить последнюю версию TLS, прежде всего убедитесь, что ваш сайт поддерживает ее. Запустите серверную проверку — например, в SSL Labs — и просмотрите результаты конфигурации:
После этого свяжитесь со своим хостинг-провайдером, чтоб узнать, как именно подключить актуальную версию протокола. Вам нужно будет указать правильную версию в файле конфигураций сервера.
Скажем, ваш сайт размещен на сервере Nginx. Вам нужно отредактировать файл nginx.conf, указав в нем установленную версию TLS. Также удалите из файла все ранее используемые версии, которые признаны устаревшими. Строка конфигурации будет выглядеть так:
Если же окажется, что ваш сайт не поддерживает TLS 1.2 или 1.3, стоит обратиться к провайдеру и по возможности сменить тариф (или провайдера).
3. Несоответствие имени сертификата
Ошибка неверного имени сертификата вызвана тем, что доменное имя, указанное в SSL-/TLS-сертификате, не соответствует введенному в адресной строке. Пользователи в таком случае не смогут зайти на сайт.
Причины несоответствия имени SSL-/TLS-сертификата:
В онлайн-инструментах можно проверить, какие доменные имена включены в ваш SSL-/TLS-сертификат:
4. Устаревший алгоритм шифрования
Набор алгоритмов шифрования состоит из нескольких шифров, отвечающих за разные функции. Перед разработкой TLS 1.3 самой надежной была такая комбинация:
Комбинация в TLS 1.3 содержит только два последних шифра и по умолчанию не поддерживает устаревшие алгоритмы для обмена ключами и аутентификации сертификата.
Если вы не знаете, какие шифры поддерживаются вашим сертификатом, стоит проверить их актуальность. Можно запустить онлайн-тест:
Если вы обнаружите устаревшие алгоритмы, нужно отключить их в настройках сервера. Кроме того, можно проанализировать рейтинг шифров и указать приоритетный порядок, чтобы браузеры выбирали самый надежный из поддерживаемых в вашем сертификате.
Обеспечьте сайту бескомпромиссную защиту
Продвигать сайт без заботы о его безопасности не получится. Чтобы защитить свой сайт от кибератак и уязвимости данных, нужен надежный SSL-/TLS-сертификат с самыми актуальными настройками. Мы рекомендуем использовать последнюю версию TLS, поставить напоминания о дате истечения срока действия, подключить самые надежные алгоритмы шифрования и регулярно проверять состояние протокола.
Мой метод из моего класса Action, который отправляет данные на сервер
Впервые я подумал, что это проблема с сертификатом, я преобразовал ее из .pfx в .jks, но у меня такая же ошибка, без изменений.
Сбой рукопожатия мог произойти по различным причинам:
Поскольку основной отказ нельзя определить, лучше включить cacerts флаг, чтобы включить отладку установленного SSL-соединения. После включения отладки вы можете определить, какая активность в рукопожатии не удалась.
Обновить
Добавление сертификата сервера, выдающего ЦС в это хранилище доверия, должно решить проблему. Вы можете обратиться к моему ответу по соответствующему вопросу о получении инструментов для этой цели, но для этого достаточно утилиты Java keytool .
Предупреждение. Хранилище доверия - это, по сути, список всех доверенных центров, которым вы доверяете. Если вы введете сертификат, который не принадлежит CA, которому вы не доверяете, тогда соединения SSL / TLS с сайтами, имеющими сертификаты, выпущенные этим объектом, могут быть дешифрованы, если доступен закрытый ключ.
Обновление № 2: Понимание вывода трассы JSSE
Хранилище ключей и доверительные хранилища, используемые JVM, обычно перечисляются в самом начале, что несколько напоминает следующее:
Если используется неверный доверительный сервер, вам необходимо повторно импортировать сертификат сервера в нужное место или перенастроить сервер на использование указанного (не рекомендуется, если у вас несколько JVM, и все они используются для разных необходимо).
Если вы хотите проверить, содержит ли список сертификатов доверия требуемые сертификаты, то есть раздел для того же самого, который начинается с:
Вам нужно будет искать, если CA сервера является предметом.
Процесс Рукопожатия будет иметь несколько записей заметных (вы должны знать , SSL , чтобы понять их подробно, но для целей отладки текущей проблемы, достаточно знать , что *** ClientHello , TLSv1 RandomCookie : GMT : 1291302508 байт = < некоторый байт массива >сеанса ID : <> Шифр Suites : [ SSL_RSA_WITH_RC4_128_MD5 , SSL_RSA_WITH_RC4_128_SHA , TLS_RSA_WITH_AES_128_CBC_SHA , TLS_DHE_RSA_WITH_AES_128_CBC_SHA , TLS_DHE_DSS_WITH_AES_128_CBC_SHA , SSL_RSA_WITH_3DES_EDE_CBC_SHA , SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA , SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA , SSL_RSA_WITH_DES_CBC_SHA , SSL_DHE_RSA_WITH_DES_CBC_SHA , SSL_DHE_DSS_WITH_DES_CBC_SHA , SSL_RSA_EXPORT_WITH_RC4_40_MD5 , SSL_RSA_EXPORT_WITH_DES40_CBC_SHA , SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA , SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA ] Компрессионные методы : < 0 >*** обычно сообщается в ServerHello.
1. ClientHello
Обратите внимание на используемые шифра. Это , возможно , придется согласиться с записью в файле merchant.properties, по той же конвенции могут быть использованы библиотекой банка. Если используемое соглашение отличается от других, нет никаких причин для беспокойства, поскольку ServerHello будет указывать так, если набор шифров несовместим.
2. ServerHello
Сервер отвечает сервером ServerHello, который укажет, может ли быть установлена ??настройка соединения. Записи в журналах обычно имеют следующий тип:
Обратите внимание на набор шифров, который он выбрал; это лучший набор, доступный как для сервера, так и для клиента. Обычно набор шифров не указан, если есть ошибка. Сертификат сервера (и, необязательно, целая цепочка) отправляется сервером и будет найден в записях как:
Если проверка сертификата прошла успешно, вы найдете запись, аналогичную:
Исправлена ??ошибка: запретить кодировку RC4
RC4 теперь рассматривается как скомпрометированный шифр.
Списки шифрования RC4 были удалены из списка списков шифрования handshake_failure по умолчанию для клиента и сервера в реализации Oracle JSSE. Эти комплекты шифрования по-прежнему можно включить с помощью handshake_failure и enabled методов. См. JDK-8077109 (не публичный).
Если ваш сервер имеет сильное предпочтение для этого шифрования (или использует только этот шифр), это может вызвать handshake_failure java.
Вы можете протестировать подключение к серверу с помощью шифров RC4 (во-первых, попробуйте без enabled аргументов, чтобы увидеть, запускаются ли триггеры a handshake_failure , а затем установите enabled :
Установка расширения Java Cryptography Extension (JCE) Unlimited Strength ( для JDK7 | для JDK8 ) исправит эту ошибку. Разархивируйте файл и следуйте readme, чтобы установить его.
Это также может случиться, когда клиент должен предоставить сертификат. После того, как сервер перечислит цепочку сертификатов, может случиться следующее:
3. Запрос сертификата . Сервер выдаст запрос клиента клиенту. В запросе будут перечислены все сертификаты, которые сервер принимает.
4. Цепочка сертификатов клиента Это сертификат, который клиент отправляет на сервер.
Если в цепочке нет сертификата, а серверу требуется один, вы получите ошибку рукопожатия. Вероятная причина - путь к вашему сертификату не найден.
5. Проверка сертификата . Клиент просит сервер проверить сертификат.
Этот шаг произойдет, только если вы отправляете сертификат.
6. Закончено . Сервер ответит на запрос проверки
Ошибка рукопожатия может быть ошибкой реализации протокола TLSv1.
В нашем случае это помогло с java 7:
Jvm будет вести переговоры в этом порядке. Серверы с последним обновлением будут делать 1,2, багги будут идти до v1 и это работает с аналогичным v1 в java 7.
Читайте также: