
Вам говорят, что ваш сайт не открывается, и присылают код: ERR_SSL_PROTOCOL_ERROR. У вас он
работает. У всех в офисе он работает. Страница, которую видит этот человек, серая, на ней примерно
два предложения, и больше она ничего не предлагает.
Вот как сам Chromium описывает эту ошибку, в файле, где определена каждая сетевая ошибка Chrome:
An SSL protocol error occurred.
Это весь комментарий. Пять слов, на ошибку номер -107. Это не сокращённая версия чего-то более длинного; это всё, что есть у браузера.
Это код, который Chrome берёт, когда не может сказать точнее
Важным это делает то, что стоит вокруг него в том же списке.
Несколькими строками ниже находится ERR_SSL_VERSION_OR_CIPHER_MISMATCH, номер -113, и его
описание точное: “The client and server don’t support a common SSL protocol version or cipher
suite.” Ещё дальше идёт целый диапазон для сертификатов, где ERR_CERT_COMMON_NAME_INVALID, номер
-200, несёт четыре названные причины, включая ту, где человек находится в беспроводной сети и его
перенаправляют на страницу входа этой сети.
То есть у Chrome есть более точные коды для сбоев, которые он умеет отнести к чему-то. Получить вместо них -107 означает, что рукопожатие провалилось способом, которому браузер не смог дать имени.
Это противоположно тому, как с этой ошибкой обычно обращаются. Любое руководство по ней это список из восьми вещей, которые стоит попробовать, и длина списка и есть подсказка: никто из тех, кто его пишет, не знает, какая из восьми подходит, потому что ошибка этого не говорит.
Что на самом деле ломается и как мало из этого ваше
Собственная страница Cloudflare по разбору этой ошибки перечисляет то, что они видят за ней. Их краткий итог в том, что рукопожатие провалилось, а причины, которые они называют, такие:
- Проблема с сертификатом: например, сертификат, который ещё не действует, или поддомен из нескольких уровней, который имеющийся сертификат не покрывает.
- Несовпадение набора шифров: по их словам, более старые клиенты могут не поддерживать современные наборы.
- HTTP/3 и QUIC, заблокированные сетью, межсетевым экраном или устройством, которое не пропускает QUIC поверх UDP.
- TLS 1.3, не полностью поддерживаемый сетевыми устройствами безопасности, которые инспектируют SSL.
- Помехи в сети: глубокая инспекция пакетов, перехватывающие прокси, родительский контроль, NAT уровня оператора.
Это взгляд одного CDN из собственной очереди поддержки, а не полная систематизация, и всё равно это самый полезный доступный список, именно из-за того, как он делится.
Посчитайте, кому принадлежит каждый пункт. Первый ваш. Второй принадлежит браузеру или операционной системе того, кто сообщает. Третий, четвёртый и пятый принадлежат оборудованию и программам между ним и вами: его маршрутизатору, инспекционному устройству его компании, его антивирусу, его провайдеру.
Один из пяти на вашей стороне, и текст ошибки у всех одинаковый.
Вот почему сообщение приходит бесполезным
“Ваш сайт сломан, ERR_SSL_PROTOCOL_ERROR” это полное описание того, что человек может видеть, и оно почти ничего вам не говорит. Очевидный следующий вопрос, только ли у него так, это ровно тот, на который вы не можете ответить со своего места: ваша машина в другой сети, за другим оборудованием, с другими программами безопасности, и договаривается, возможно, с другим краевым узлом.
Это та же проблема, что и отличить свою ошибку от чужого сбоя, и у неё то же свойство: доказательство, которое всё решило бы, существует только на его машине и только пока это происходит.
Это не предупреждение о сертификате, и разница велика
Если человек описывает красную страницу с предупреждением, что соединение не защищено, и код,
начинающийся с ERR_CERT_, то это другая ошибка и гораздо более поддающаяся разбору: такие коды
называют свою причину, и какая из пяти это выясняется за минуту.
У ERR_SSL_PROTOCOL_ERROR нет ни такой страницы, ни такой причины. Стоит установить, какую из
двух он на самом деле видел, прежде чем потратить полдня не на ту, и быстрее всего попросить
скриншот, а не описание.
Две проверки, которые делят поле
Страница Cloudflare заканчивает свой же совет указанием собирать диагностические данные у затронутых посетителей, и это честная форма ответа. До этого есть две вещи, которые тот, кто сообщает, может сделать за минуту и которые сужают круг сильнее всего, что вы можете запустить сами.
Попросите попробовать через мобильный интернет, выключив Wi-Fi. Если страница откроется, проблема между его сетью и вами, и никакое изменение на вашем сервере ему не поможет. Если всё равно не открывается, его сеть не причина.
Попросите попробовать другой браузер на той же машине. Если там откроется, причина в его браузере: в поддержке протоколов, в собственном хранилище сертификатов или в расширении, которое стоит впереди. Если не открывается в обоих, задействована машина или её сеть, а не браузер.
Эти два ответа вместе покрывают четыре причины из пяти выше и стоят человеку около девяноста
секунд. Что вы хотите видеть записанным рядом: полный адрес, было введено http или https,
точный код, время и падало ли что-нибудь ещё в ту же минуту.
Случай, который ваш, а выглядит как их
Один сценарий стоит знать, потому что он даёт ровно эту ошибку на вашей стороне, выглядя при этом
как проблема клиента. Сертификат действительный, но ещё не вступивший в силу, потому что дата
начала в будущем, роняет рукопожатие вместо того, чтобы выдать страницу предупреждения, и роняет
его у всех, у кого часы идут верно. То же касается хоста на уровень глубже, чем покрывает
сертификат: app.eu.example.com против сертификата, выданного на *.example.com, не покрыт,
потому что одна звёздочка совпадает с одной меткой.
И то и другое правится вами, и то и другое приходит как эта ошибка, и ни одно не отличить от проблемы промежуточного устройства, не проверив сертификат, который ваш край действительно отдаёт.
Session Replay
Бесплатное расширение для Chrome. Один клик на странице, которая ведёт себя не так, как надо, захватывает скриншот, консоль и сетевой журнал и выдаёт вам ссылку, которую можно вставить в тикет.
Что из этого забрать
ERR_SSL_PROTOCOL_ERROR это не диагноз. Это его отсутствие, и Chromium говорит именно это пятью
словами. Воспринимайте его как сообщение браузера о том, что рукопожатие провалилось и что он не
смог выяснить почему, и тогда тратьте силы на два вопроса, которые делят причины, а не на список
из восьми исправлений, семь из которых всё равно никогда не подошли бы.