Истёкший или неверно настроенный TLS-сертификат TLS certificate expiry / misconfiguration
ID причины in-cert · Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда инфраструктуры · Серверная инфраструктура, Команда разработки · Разработка клиента
Если у сервера авторизации, API или патчей истекает сертификат или пропадает промежуточный сертификат, с этого момента у новых подключений клиентов не устанавливается TLS-соединение.
Почему Срок действия сертификата истёк, сервер отдаёт цепочку без промежуточного сертификата, или на устройстве игрока неверные дата и время → Следствие Клиент не проходит проверку сертификата и разрывает TLS-соединение → На экране Ошибка входа или бесконечная загрузка на этапе входа или патча, не работают только функции через HTTPS, например магазин. У тех, кто уже был в игре, обычно всё в порядке
Сразу после входа или техработ, При определённом действии
Ответственные
Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда инфраструктуры · Серверная инфраструктура, Команда разработки · Разработка клиента
Команда разработки: задачи
Записывать ошибку сертификата отдельным кодом, отличным от других сбоев подключения, и показывать сообщение, при ошибке даты советовать включить автоматическую установку даты и времени на устройстве, при закреплении сертификата (pinning) добавить резервный ключ и согласовать график смены сертификатов с командой инфраструктуры.
Команда инфраструктуры: задачи
Сеть: если TLS терминируется на балансировщике или CDN, следить за автообновлением управляемых сертификатов и настроить алерт на число оставшихся дней (в ACM это DaysToExpiry), сохранять DNS-записи для проверки. Серверы и ОС: если TLS терминируется на сервере, автоматизировать обновление и перечитывание конфигурации после него, настроить полную цепочку с промежуточным сертификатом, регулярно проверять снаружи оставшийся срок действия для каждого адреса авторизации, API и патчей и слать алерт.
Цифры для ориентира
Сертификаты Let’s Encrypt выдаются на 90 дней, и обновлять их рекомендуется каждые 60 дней, а AWS Certificate Manager проверяет сертификаты, подтверждённые через DNS, за 45 дней до истечения и обновляет их автоматически. Если автообновление тихо сломалось, ровно в момент истечения разом перестают проходить все новые подключения.
На графике
Массовый обрыв соединений · число успешных входов, число ошибок TLS-рукопожатия
Где смотреть
Посмотреть через openssl s_client -connect HOST:443 -showcerts, какие сертификаты сервер реально отдаёт, и проверить срок действия каждого (notAfter) через openssl x509 -noout -enddate. Если TLS терминируется на балансировщике, смотреть число ошибок согласования TLS (в AWS ALB и NLB это ClientTLSNegotiationErrorCount) и число успешных входов
Подтверждает
Срок действия истёк или в отдаваемом списке нет промежуточного сертификата, а рост ошибок начался в момент истечения или замены сертификата
Опровергает
Если список сертификатов и сроки в порядке, а ошибка только у части игроков, проверить дату и время на их устройствах или список корневых сертификатов в старой ОС
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
Конфигурация без промежуточного сертификата может выглядеть рабочей, если открыть адрес в браузере на ПК. Браузер помнит промежуточные сертификаты, полученные с других сайтов, и подставляет недостающие, а клиент без такой памяти, например Android-приложение, получает ошибку. Сроки действия тоже сокращаются. Let’s Encrypt планирует уменьшить стандартный срок до 64 дней в 2027 году и до 45 дней в 2028 году, поэтому при жёстко заданном обновлении раз в 60 дней у 64-дневного сертификата запас всего четыре дня, а 45-дневный успеет истечь. AWS Certificate Manager к тому же не обновляет автоматически импортированные (import) сертификаты, а если удалить DNS-запись для проверки, обновление не пройдёт. Внешне отказ входа похож на причину «Сбои и задержки DNS», но при проблеме с сертификатом адрес сервера находится, а сбой происходит на TLS-рукопожатии, и начало совпадает со временем истечения или замены сертификата.
FAQLet's Encrypt Стандартный срок действия сертификата 90 дней, рекомендуется обновлять каждые 60 дней
Decreasing Certificate Lifetimes to 45 DaysLet's Encrypt Стандартный срок действия сокращается до 64 дней с февраля 2027 года и до 45 дней с февраля 2028 года. Обновления с фиксированным интервалом 60 дней станет недостаточно, рекомендуется обновлять примерно на 2/3 срока действия
Renewal for domains validated by DNSAWS За 45 дней до истечения проверяется, используется ли сертификат в сервисах AWS и есть ли CNAME-запись для проверки, и сертификат обновляется автоматически. Если проверить не удалось, уведомления приходят за 30, 15, 7, 3 и 1 день до истечения
Supported CloudWatch metricsAWS DaysToExpiry: число дней до истечения сертификата, публикуется два раза в сутки, пока сертификат не истёк
Security with network protocolsAndroid (Google) Если сервер отдаёт цепочку без промежуточного сертификата, Android-приложение получает SSLHandshakeException, а браузер на ПК может подставить сохранённый промежуточный сертификат и обойтись без ошибки. Цепочку, которую отдаёт сервер, проверяют через openssl s_client
Network security configurationAndroid (Google) При закреплении сертификата нужно добавить резервный ключ на случай смены ключа или CA, иначе соединения не будут проходить до обновления приложения
openssl-s_clientOpenSSL -showcerts: показывает сертификаты в том порядке, в каком их отправил сервер (это не проверенная цепочка)
openssl-x509OpenSSL -enddate: выводит дату истечения сертификата (notAfter), -checkend: проверяет, истечёт ли сертификат в течение заданного числа секунд
CloudWatch metrics for your Application Load BalancerAWS ClientTLSNegotiationErrorCount: число соединений, для которых не удалось установить TLS-сессию, в том числе когда клиент не прошёл проверку сертификата сервера и разорвал соединение