SSL Handshake Failed: что значит ошибка и как исправить

SSL Handshake Failed означает, что браузер, сервер или CDN не смогли согласовать защищённое HTTPS-соединение. Ошибка появляется до загрузки сайта, на этапе SSL/TLS-handshake, когда стороны проверяют сертификат, протоколы, шифры и параметры безопасности.

Чаще всего проблема связана с SSL-сертификатом, TLS-настройками, Cloudflare, Nginx, Apache, закрытым портом 443, неправильным DNS или устаревшими cipher suites.

Quick Fix

  • Проверьте дату и время на устройстве.
  • Откройте сайт в другом браузере и другой сети.
  • Очистите кэш браузера и SSL state.
  • Отключите VPN, прокси и HTTPS scanning в антивирусе.
  • Если вы владелец сайта, проверьте срок действия SSL-сертификата.
  • Проверьте, открыт ли порт 443: sudo ss -tulpn | grep :443
  • Проверьте Nginx: sudo nginx -t
  • Проверьте Apache: sudo apachectl configtest
  • Включите TLS 1.2 и TLS 1.3.
  • Если сайт за Cloudflare, проверьте SSL/TLS mode и origin-сертификат.

Что означает SSL Handshake Failed

SSL Handshake Failed означает сбой при установке HTTPS-соединения. Перед тем как сайт загрузится, браузер и сервер должны выполнить SSL/TLS-handshake.

Во время handshake они согласовывают:

  • SSL/TLS-версию;
  • набор шифров;
  • SSL-сертификат;
  • домен сертификата;
  • цепочку доверия;
  • параметры защищённого соединения.

Если хотя бы один из этих этапов не проходит, соединение обрывается. Пользователь видит ошибку SSL, а сайт не загружается.

Как выглядит ошибка

В разных браузерах и сервисах ошибка может выглядеть по-разному:

  • SSL Handshake Failed
  • ERR_SSL_PROTOCOL_ERROR
  • ERR_SSL_VERSION_OR_CIPHER_MISMATCH
  • ERR_CERT_DATE_INVALID
  • NET::ERR_CERT_COMMON_NAME_INVALID
  • SSL_ERROR_HANDSHAKE_FAILURE_ALERT
  • PR_END_OF_FILE_ERROR
  • Cloudflare 525 SSL Handshake Failed
  • Cloudflare 526 Invalid SSL Certificate

Если ошибка появляется у всех пользователей, проблема почти всегда на стороне сайта, сервера или CDN. Если только у одного пользователя, причина может быть в браузере, устройстве, сети, VPN или антивирусе.

Основные причины SSL Handshake Failed

1. SSL-сертификат истёк

Если сертификат просрочен, браузер или CDN не смогут доверять соединению. Это одна из самых частых причин ошибки.

Проверьте сертификат на сервере:

sudo certbot certificates

Если сертификат истёк, его нужно продлить или перевыпустить.

2. Сертификат выпущен не для того домена

Если пользователь открывает example.com, а сертификат выпущен только для www.example.com или другого домена, handshake может завершиться ошибкой.

Сертификат должен покрывать все используемые версии:

example.com
www.example.com

Если используются поддомены, они тоже должны быть указаны в сертификате.

3. Неполная цепочка сертификатов

Сервер должен отдавать не только основной сертификат, но и intermediate certificates. Если цепочка неполная, некоторые браузеры или CDN могут не доверять сертификату.

Для Let’s Encrypt в Nginx обычно нужно использовать:

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

Не только cert.pem, а именно fullchain.pem.

4. Приватный ключ не совпадает с сертификатом

Если в конфигурации указан сертификат от одного выпуска, а приватный ключ от другого, SSL-handshake не пройдёт.

Такая проблема часто возникает после ручной замены SSL-файлов, миграции сайта или восстановления из бэкапа.

5. Сервер поддерживает устаревшие TLS-версии

Современные браузеры не принимают старые протоколы вроде SSLv3, TLS 1.0 и TLS 1.1. Для нормальной работы HTTPS обычно нужны:

TLS 1.2
TLS 1.3

Если сервер поддерживает только старые протоколы, появится ошибка handshake.

6. Неподдерживаемые cipher suites

Браузер и сервер должны выбрать общий набор шифров. Если сервер предлагает только устаревшие или слабые cipher suites, соединение может быть отклонено.

Это часто бывает на старых VPS, старых версиях Apache, Nginx, OpenSSL или в устаревших панелях хостинга.

7. Неправильный SSL/TLS mode в Cloudflare

Cloudflare часто показывает ошибку 525 SSL Handshake Failed, если не может установить HTTPS-соединение с origin-сервером.

Частые причины:

  • на origin-сервере нет SSL-сертификата;
  • сертификат на сервере истёк;
  • сертификат выпущен не для этого домена;
  • порт 443 закрыт;
  • сервер поддерживает старые TLS-версии;
  • Cloudflare блокируется firewall;
  • выбран режим Full (strict), но origin-сертификат недействителен.

8. Порт 443 закрыт

HTTPS работает через порт 443. Если он закрыт firewall, не слушается веб-сервером или заблокирован провайдером, SSL-handshake не начнётся или оборвётся.

Проверка на сервере:

sudo ss -tulpn | grep :443

Если команда ничего не показывает, веб-сервер не слушает HTTPS-порт.

9. Ошибка в Nginx или Apache

Даже при рабочем сертификате handshake может не пройти из-за неправильной конфигурации веб-сервера.

Типичные ошибки:

  • нет listen 443 ssl; в Nginx;
  • нет SSLEngine on в Apache;
  • указан неправильный путь к сертификату;
  • используется сертификат от другого домена;
  • конфликтуют несколько server blocks или VirtualHost;
  • неправильно настроен default server.

10. DNS указывает на неправильный сервер

Если домен указывает на старый IP, пользователь может попадать на сервер с неправильным SSL. Владелец сайта проверяет новый сервер, но трафик идёт на старый.

Также проблема может быть в неправильной AAAA-записи IPv6.

Как исправить SSL Handshake Failed пользователю

1. Проверьте дату и время

Неправильная дата на устройстве может нарушить проверку SSL-сертификата.

Проверьте:

  • дату;
  • время;
  • часовой пояс;
  • автоматическую синхронизацию времени.

После исправления перезапустите браузер.

2. Откройте сайт в другом браузере

Проверьте сайт в Chrome, Firefox, Edge или Safari. Если ошибка появляется только в одном браузере, причина может быть в кэше, расширениях или настройках этого браузера.

3. Очистите кэш браузера

В Chrome откройте:

Настройки → Конфиденциальность и безопасность → Очистить данные браузера

Выберите cookies, кэшированные файлы и данные сайтов. Затем перезапустите браузер.

4. Очистите SSL state на Windows

  1. Откройте меню Start.
  2. Введите Internet Options.
  3. Откройте вкладку Content.
  4. Нажмите Clear SSL state.
  5. Перезапустите браузер.

5. Отключите VPN или прокси

VPN и прокси могут вмешиваться в HTTPS-соединение. Временно отключите их и попробуйте открыть сайт напрямую.

Также проверьте сайт через мобильный интернет. Если через мобильную сеть сайт работает, проблема может быть в Wi-Fi, DNS, прокси или провайдере.

6. Отключите HTTPS scanning в антивирусе

Некоторые антивирусы проверяют зашифрованный трафик и могут ломать SSL-handshake.

Ищите настройки:

  • HTTPS scanning;
  • SSL scanning;
  • Encrypted connections scanning;
  • Web Shield;
  • Scan secure traffic.

Отключите эту функцию временно для проверки. Не оставляйте защиту выключенной без необходимости.

7. Обновите браузер и систему

Старый браузер или старая операционная система может не поддерживать современные TLS-версии и сертификаты.

В Chrome откройте:

chrome://settings/help

Установите обновления и перезапустите браузер.

Как исправить SSL Handshake Failed владельцу сайта

1. Проверьте SSL-сертификат

Убедитесь, что сертификат:

  • не истёк;
  • выпущен для правильного домена;
  • покрывает www и non-www версии;
  • имеет полную цепочку;
  • совпадает с приватным ключом;
  • установлен в правильный server block или VirtualHost.

Для Let’s Encrypt:

sudo certbot certificates

2. Продлите или перевыпустите сертификат

Попробуйте продлить сертификат:

sudo certbot renew

Если нужно перевыпустить сертификат для Nginx:

sudo certbot --nginx -d example.com -d www.example.com

Для Apache:

sudo certbot --apache -d example.com -d www.example.com

После этого перезагрузите веб-сервер.

3. Проверьте Nginx SSL-конфигурацию

Пример базового HTTPS-блока:

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
}

Проверьте конфигурацию:

sudo nginx -t

Если ошибок нет:

sudo systemctl reload nginx

4. Проверьте Apache SSL-конфигурацию

Пример VirtualHost для HTTPS:

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com/public_html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
</VirtualHost>

Проверьте Apache:

sudo apachectl configtest

Если всё правильно:

sudo systemctl reload apache2

5. Включите TLS 1.2 и TLS 1.3

Для современных браузеров используйте TLS 1.2 и TLS 1.3. Старые SSLv3, TLS 1.0 и TLS 1.1 лучше отключить.

Для Nginx:

ssl_protocols TLSv1.2 TLSv1.3;

Для Apache:

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

6. Проверьте cipher suites

Если сервер использует слишком старые шифры, handshake может завершиться ошибкой.

Для Nginx можно использовать базовый современный вариант:

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers off;

Не копируйте старые cipher-наборы из устаревших инструкций. Они могут сломать HTTPS в современных браузерах.

7. Проверьте порт 443

Проверьте, слушает ли сервер HTTPS-порт:

sudo ss -tulpn | grep :443

Откройте порт в UFW:

sudo ufw allow 443/tcp
sudo ufw reload

Также проверьте firewall в панели VPS-провайдера.

8. Проверьте Cloudflare

Если сайт работает через Cloudflare, откройте:

Cloudflare → SSL/TLS → Overview

Проверьте режим:

  • Full — если на сервере есть SSL, но он может быть нестрогим;
  • Full (strict) — если на сервере валидный сертификат;
  • Flexible — лучше не использовать для сайта, где HTTPS уже настроен на сервере.

Если видите Cloudflare 525 SSL Handshake Failed, значит Cloudflare не может установить HTTPS-соединение с вашим origin-сервером.

Проверьте:

  • origin-сертификат;
  • порт 443;
  • TLS 1.2/1.3;
  • firewall;
  • DNS A-запись;
  • режим Full или Full (strict).

9. Проверьте DNS

Домен должен указывать на правильный сервер.

Проверьте A-запись:

dig example.com A

Проверьте www:

dig www.example.com A

Проверьте IPv6:

dig example.com AAAA

Если AAAA-запись ведёт на старый сервер без SSL, удалите её или настройте SSL на IPv6-сервере.

10. Проверьте логи сервера

Для Nginx:

sudo tail -n 100 /var/log/nginx/error.log

Для Apache:

sudo tail -n 100 /var/log/apache2/error.log

Для Let’s Encrypt:

sudo tail -n 100 /var/log/letsencrypt/letsencrypt.log

В логах могут быть сообщения о handshake failure, no shared cipher, certificate mismatch, expired certificate или неправильной SSL-конфигурации.

SSL Handshake Failed в Cloudflare

Cloudflare показывает 525 SSL Handshake Failed, когда не может установить SSL-соединение с origin-сервером.

Быстрая проверка:

  1. Откройте Cloudflare DNS и проверьте IP сервера.
  2. Проверьте, открыт ли порт 443 на origin-сервере.
  3. Убедитесь, что на сервере установлен SSL-сертификат.
  4. Поставьте SSL/TLS mode Full или Full (strict).
  5. Проверьте, не блокирует ли firewall IP-адреса Cloudflare.
  6. Очистите Cloudflare cache после исправления.

Если выбран Full (strict), сертификат на сервере должен быть валидным и выпущенным для правильного домена. Если сертификат самоподписанный или просроченный, используйте Cloudflare Origin Certificate или Let’s Encrypt.

SSL Handshake Failed в WordPress

WordPress редко вызывает handshake error напрямую. Обычно причина находится на уровне сервера, SSL, Cloudflare или DNS.

Но в WordPress стоит проверить:

  • Настройки → Общие — оба URL должны начинаться с https://;
  • нет ли конфликтующих SSL-плагинов;
  • нет ли редирект-лупа в .htaccess;
  • не включены ли HTTPS-редиректы сразу в нескольких местах;
  • очищен ли кэш сайта;
  • не остались ли старые URL после миграции.

SSL Handshake Failed после миграции сайта

После переноса сайта ошибка часто появляется из-за DNS, старого сертификата или неправильного HTTPS-конфига.

Проверьте:

  • A-запись домена;
  • AAAA-запись;
  • SSL на новом сервере;
  • Nginx или Apache server block;
  • Cloudflare DNS;
  • порт 443;
  • редиректы со старого домена;
  • кэш CDN и браузера.

Advanced Troubleshooting

Проверьте сертификат через OpenSSL

Можно проверить, что сервер реально отдаёт:

openssl s_client -connect example.com:443 -servername example.com

В выводе проверьте домен сертификата, даты действия, цепочку и возможные ошибки handshake.

Проверьте OpenSSL на сервере

Если сервер очень старый, проблема может быть в устаревшем OpenSSL.

openssl version

Если система давно не обновлялась, обновите пакеты сервера и веб-сервер.

Проверьте дублирующиеся конфиги

Для Nginx:

sudo grep -R "example.com" /etc/nginx/

Для Apache:

sudo grep -R "example.com" /etc/apache2/

Если домен встречается в нескольких конфигурациях, сервер может использовать не тот сертификат.

Проверьте default server

Если HTTPS-запрос попадает не в тот server block, сервер может отдавать неправильный сертификат.

Для Nginx найдите default server:

sudo grep -R "default_server" /etc/nginx/

Убедитесь, что default-конфиг не конфликтует с нужным доменом.

Проверьте firewall для Cloudflare

Если сайт за Cloudflare, origin-сервер должен принимать подключения от Cloudflare. Если firewall блокирует эти IP, Cloudflare может показать 525.

Проверьте правила UFW, iptables, fail2ban, CSF или firewall панели VPS.

Чего не стоит делать

  • Не отключайте HTTPS полностью без необходимости.
  • Не включайте SSLv3, TLS 1.0 или TLS 1.1 ради совместимости.
  • Не оставляйте Cloudflare в режиме Flexible, если сервер уже настроен на HTTPS.
  • Не удаляйте сертификаты без возможности быстро перевыпустить SSL.
  • Не меняйте DNS, Cloudflare, SSL и серверные конфиги одновременно.
  • Не игнорируйте ошибку, если она появляется у всех пользователей.

Как предотвратить SSL Handshake Failed

  • Используйте TLS 1.2 и TLS 1.3.
  • Следите за сроком действия SSL-сертификата.
  • Настройте автоматическое продление Let’s Encrypt.
  • Проверяйте порт 443 после настройки firewall.
  • Используйте fullchain.pem, а не только основной сертификат.
  • Не держите старые SSL-конфиги активными.
  • Проверяйте Cloudflare SSL/TLS после подключения CDN.
  • После миграции проверяйте DNS, SSL и HTTPS напрямую.
  • Обновляйте OpenSSL, Nginx, Apache и серверные пакеты.

Когда обращаться в поддержку хостинга

Обратитесь в поддержку, если:

  • у вас нет доступа к SSL/TLS-настройкам;
  • сертификат не продлевается через панель;
  • порт 443 закрыт на стороне провайдера;
  • сервер отдаёт неправильный сертификат;
  • Cloudflare показывает 525 или 526;
  • вы не можете изменить Nginx или Apache;
  • ошибка появилась после миграции;
  • вы не понимаете сообщения в логах.

Перед обращением подготовьте домен, скрин ошибки, время появления проблемы, информацию о Cloudflare и результат проверки SSL в панели хостинга.

FAQ

Что значит SSL Handshake Failed?

Это значит, что браузер, сервер или CDN не смогли согласовать защищённое HTTPS-соединение. Причина может быть в сертификате, TLS-версии, шифрах, Cloudflare, DNS, порте 443 или настройках сервера.

Как быстро исправить SSL Handshake Failed?

Пользователю стоит проверить дату, кэш, VPN, антивирус и браузер. Владельцу сайта нужно проверить SSL-сертификат, TLS 1.2/1.3, порт 443, Nginx или Apache, DNS и Cloudflare.

Почему Cloudflare показывает 525 SSL Handshake Failed?

Cloudflare не может установить HTTPS-соединение с origin-сервером. Проверьте SSL на сервере, порт 443, SSL/TLS mode, firewall и DNS-запись.

Может ли просроченный сертификат вызвать SSL Handshake Failed?

Да. Если сертификат истёк или выпущен не для того домена, handshake может завершиться ошибкой.

Какие TLS-версии должны быть включены?

Для современного сайта обычно нужны TLS 1.2 и TLS 1.3. Старые SSLv3, TLS 1.0 и TLS 1.1 лучше отключить.

Вывод

SSL Handshake Failed означает, что HTTPS-соединение не прошло этап согласования безопасности. Для пользователя проблема часто связана с датой, браузером, VPN или антивирусом. Для владельца сайта причина обычно в SSL-сертификате, TLS, Cloudflare, Nginx, Apache, DNS или порте 443.

Лучший порядок действий: проверить сертификат, порт 443, TLS 1.2/1.3, конфигурацию веб-сервера, Cloudflare и DNS. Не включайте старые протоколы как обходной путь. Правильное решение — настроить современное и корректное HTTPS-соединение.