Банк прислал «убедитесь, что ваш сервер доверяет нашим сертификатам», а как убедиться — не написал. Собрали проверку в одну инструкцию: по шагам, с командами и объяснением, что означают результаты.
«Проверить сертификаты» — это на самом деле три разных вопроса. Первый: в порядке ли сертификат самого сайта — тот, что видят браузеры посетителей. Второй: есть ли в хранилище сервера корневые сертификаты, которым должен доверять ваш код. Третий: реально ли устанавливается защищённое соединение с конкретным API — банка, СМС-шлюза, налоговой. Можно пройти первые два уровня и провалить третий, поэтому проверяем все.
Откройте сайт в браузере, кликните на замок в адресной строке → «Сертификат». Смотрите две вещи: срок действия (если осталось меньше двух недель — пора продлевать, автопродление, возможно, молчит) и полноту цепочки. Внешняя проверка глубже — публичными сервисами анализа SSL: они покажут цепочку, протоколы и типовые ошибки конфигурации. Частая находка: сертификат в порядке, но сервер не отдаёт промежуточный сертификат — часть клиентов при этом видит ошибку, часть нет, и баг месяцами живёт «плавающим».
На Linux-сервере системное хранилище лежит в /etc/ssl/certs. Проверить наличие нужного корня можно перебором: awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i -e "Russian Trusted" -e "HARICA". Пусто в выводе — корней Минцифры/HARICA в системном хранилище нет. Важно помнить про множественность хранилищ: у PHP/curl может быть свой файл (смотрите curl.cainfo в php.ini), у Python — пакет certifi, у Java — keystore, а в Docker-контейнере хранилище своё, и корни с хост-машины туда не «протекают». Установка корня не туда — причина половины загадочных случаев «поставили, но не работает».
curl -vI https://адрес-api-вашего-банка — адрес есть в документации эквайрингаСроки сертификатов — идеальный кандидат на автоматику: скрипт мониторинга раз в сутки проверяет сертификат сайта и соединения с критичными API и пишет в Telegram, если до истечения меньше 14 дней или проверка упала. Настройка занимает час, а избавляет от сценария «узнали от клиентов» навсегда — такой мониторинг мы включаем всем клиентам технического сопровождения.
Мы установим и настроим все нужные сертификаты — корни Минцифры и HARICA во все хранилища, проверка боевыми запросами, инструкция вашей команде: 40 000 ₽, 1–2 дня. А если разбираться некогда даже с инструкцией — пришлите результат curl -vI нам в WhatsApp, подскажем диагноз бесплатно.
Сама установка — несколько команд: скачать корневые сертификаты с официальных источников, положить в хранилище, обновить индекс. Сложность в полноте: найти все хранилища, которыми пользуется ваш код (система, PHP, Python, Java, контейнеры), и проверить каждое боевым запросом. Именно на «нашли не все» приходится большинство повторных обращений.
Для обычного сайта услуг или магазина — нет: посетители ходят по вашему публичному сертификату, как раньше. Корни Минцифры/HARICA нужны вашему серверу для исходящих соединений с банками и госсервисами. Путаница между этими контурами — источник половины страхов «сайт перестанут открывать».
Разово — после любых изменений: переезд, обновление сервера, новый банк или API. Постоянно — автоматикой: ежедневный мониторинг сроков и валидности соединений с уведомлениями. Ручные регулярные проверки не работают — про них забывают именно к тому моменту, когда они становятся нужны.