Установка TLS-сертификата Минцифры
Зачем это нужно?
Точка Банк использует TLS-сертификаты Национального удостоверяющего центра Минцифры России - Russian Trusted CA.
Эти сертификаты не входят в доверенные хранилища большинства операционных систем, браузеров и языковых библиотек по умолчанию. Без них соединение с enter.tochka.com будет отклоняться с ошибкой проверки сертификата, и интеграция перестанет работать.
Чтобы этого не произошло, добавьте сертификаты Минцифры в хранилище доверенных сертификатов — на сервере, в приложении или в браузере, в зависимости от того, как вы работаете с Точка Банк.
Устанавливать нужно два сертификата:
- Russian Trusted Root CA — корневой
- Russian Trusted Sub CA — выпускающий (промежуточный)
В архивах для каждой системы лежит по несколько файлов — варианты на алгоритмах RSA и ГОСТ. Устанавливайте все файлы из архива для вашей системы.
Где скачать сертификаты
Скачивайте сертификаты только из официального источника — со страницы Госуслуг gosuslugi.ru/crt. На странице выберите раздел для вашей операционной системы и скачайте корневой и выпускающий сертификаты.
Не скачивайте сертификаты из писем, мессенджеров или сторонних сайтов. Корневой сертификат получает широкие полномочия в системе, поэтому источник должен быть доверенным.
Для установки через командную строку используются прямые ссылки на файлы:
- корневой:
https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt - выпускающий:
https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt
Установка для разработчиков и серверов
Это основной сценарий для работы с API. Чтобы запросы к https://enter.tochka.com/uapi из вашего кода проходили проверку TLS, добавьте сертификаты в хранилище доверенных сертификатов того окружения, из которого выполняются запросы. Если окружений несколько (например, приложение в Docker и отдельный сервис), настройте каждое.
Проверьте формат файла
Файлы .cer и .crt бывают в двух форматах: текстовом PEM (начинается с -----BEGIN CERTIFICATE-----) и бинарном DER. Утилиты update-ca-certificates и keytool принимают только PEM.
# Проверить формат
openssl x509 -in cert.cer -noout -text >/dev/null 2>&1 && echo "PEM" || echo "DER — нужна конвертация"
# Сконвертировать DER в PEM
openssl x509 -inform DER -in cert.cer -out cert.pem
Linux: Debian, Ubuntu и производные
Скопируйте сертификаты в каталог доверенных и обновите хранилище:
sudo mkdir -p /usr/local/share/ca-certificates/russian-trusted
cd /usr/local/share/ca-certificates/russian-trusted
sudo wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
sudo wget https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt
sudo update-ca-certificates
Linux: RHEL, CentOS, Alma, Rocky, Fedora
Здесь используется другой каталог и команда:
cd /etc/pki/ca-trust/source/anchors/
sudo wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
sudo wget https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt
sudo update-ca-trust
Python (requests, httpx, aiohttp)
Эти библиотеки используют bundle certifi, а не системное хранилище. Укажите путь к сертификату через переменные окружения:
export REQUESTS_CA_BUNDLE=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_root_ca_pem.crt
export SSL_CERT_FILE=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_root_ca_pem.crt
Либо передайте путь прямо в коде:
import requests
requests.get("https://enter.tochka.com/uapi", verify="/путь/к/russian_trusted_root_ca_pem.crt")
Node.js
Node.js по умолчанию не читает системное хранилище. Укажите сертификат через переменную окружения:
NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_root_ca_pem.crt node app.js
Java / JVM
JVM использует собственное хранилище, а не системное хранилище ОС. Рекомендуем создать отдельный truststore, а не менять cacerts внутри JRE: правки в cacerts сбрасываются при обновлении JDK, и в production на запись в этот файл часто нет прав.
keytool -importcert -alias russian_trusted_root \
-file russian_trusted_root_ca_pem.crt \
-keystore russian_truststore.jks \
-storepass <пароль> -noprompt
keytool -importcert -alias russian_trusted_sub \
-file russian_trusted_sub_ca_pem.crt \
-keystore russian_truststore.jks \
-storepass <пароль> -noprompt
Укажите truststore при запуске приложения:
java -Djavax.net.ssl.trustStore=/путь/к/russian_truststore.jks \
-Djavax.net.ssl.trustStorePassword=<пароль> \
-jar app.jar
Отдельный truststore содержит только явно добавленные сертификаты и не наследует публичные CA. Если приложению нужно доверять одновременно публичным центрам и Минцифры, импортируйте сертификаты Минцифры в копию стандартного cacerts. Путь к нему зависит от версии: Java 8 — $JAVA_HOME/jre/lib/security/cacerts, Java 9 и новее — $JAVA_HOME/lib/security/cacerts.
Docker
Добавляйте сертификаты на этапе сборки образа, а не в рантайме:
COPY russian_trusted_root_ca_pem.crt /usr/local/share/ca-certificates/russian_trusted_root_ca.crt
COPY russian_trusted_sub_ca_pem.crt /usr/local/share/ca-certificates/russian_trusted_sub_ca.crt
RUN update-ca-certificates
# Для Python и Node.js внутри контейнера дополнительно задайте переменные:
ENV REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
Windows (.NET, IIS)
.NET и IIS используют системное хранилище сертификатов Windows. Установите сертификаты в хранилище LocalMachine — оно используется сервисами и приложениями:
# PowerShell с правами администратора
Import-Certificate -FilePath "C:\certs\russian_trusted_root_ca.cer" -CertStoreLocation Cert:\LocalMachine\Root
Import-Certificate -FilePath "C:\certs\russian_trusted_sub_ca.cer" -CertStoreLocation Cert:\LocalMachine\CA
Корневой сертификат ставится в хранилище Root (доверенные корневые центры), выпускающий — в CA (промежуточные центры). После установки перезапустите пул приложений или сервис.
curl (разовая проверка)
Чтобы проверить соединение, не устанавливая сертификат в систему, передайте его прямо в запросе:
curl --cacert russian_trusted_root_ca_pem.crt https://tls-test.tochka.com/api/
Как проверить установку
У Точка Банк есть специальный домен, который уже работает на сертификатах Минцифры. Отправьте на него запрос: если ваша система доверяет сертификатам, соединение пройдёт без ошибок TLS. Так вы убедитесь, что всё установлено правильно, ещё до перехода боевого API на новые сертификаты.
curl -v https://tls-test.tochka.com/api
# В выводе должно быть: {"status":"ok"}
Посмотреть цепочку сертификатов сервера:
openssl s_client -connect tls-test.tochka.com/api :443 -servername tls-test.tochka.com/api -showcerts </dev/null
Флаг -servername (SNI) обязателен: без него сервер может вернуть не тот сертификат. В выводе цепочки должны присутствовать Russian Trusted Root CA и Russian Trusted Sub CA.
Если запрос прошёл без ошибок TLS — сертификаты установлены правильно, и ваша интеграция продолжит работать после перехода API на сертификаты Минцифры.
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
unable to get local issuer certificate | Не установлен выпускающий сертификат (Sub CA) | Установить оба сертификата |
Ошибка сохраняется после update-ca-certificates | Python или Node.js используют свой bundle | Задать REQUESTS_CA_BUNDLE / NODE_EXTRA_CA_CERTS |
| Работает локально, падает в production | Разные окружения или truststore | Настроить каждое окружение отдельно |
update-ca-certificates отработал, но CA не доверяется | Файл в формате DER вместо PEM | Сконвертировать в PEM (см. выше) |
| В Docker всё падает в рантайме | Сертификат добавлен после сборки | Добавить на этапе build и пересобрать образ |
| Возвращается не тот сертификат | Не передан SNI | Добавить -servername enter.tochka.com |
Как откатить изменения
Если после установки возникли проблемы, удалите добавленные сертификаты:
# Debian / Ubuntu
sudo rm /usr/local/share/ca-certificates/russian-trusted/russian_trusted_*.crt
sudo update-ca-certificates --fresh
# RHEL / CentOS / Fedora
sudo rm /etc/pki/ca-trust/source/anchors/russian_trusted_*.crt
sudo update-ca-trust
Для Java уберите флаги -Djavax.net.ssl.trustStore при запуске. В Windows удалите сертификаты из хранилищ Root и CA через оснастку certlm.msc.
Вопросы и ответы
Обязательно делать это прямо сейчас?
Лучше не откладывать. Пока боевой API работает на прежних сертификатах, но их могут отозвать и тогда запросы из окружений без нужных сертификатов начнут возвращать ошибку проверки TLS. Если установить сертификаты заранее, переключение пройдёт для вас незаметно.
Что будет, если ничего не делать?
После перехода API на сертификаты Минцифры ваши запросы к нему перестанут проходить — соединение будет отклоняться с ошибкой проверки сертификата. Интеграция остановится, пока сертификаты не будут установлены.
Можно ли установить сертификаты заранее, пока API работает на прежних сертификатах?
Да, и именно так рекомендуем. Сертификаты Минцифры можно добавить в хранилище в любой момент — на текущую работу это не влияет, а к моменту переключения всё уже будет готово.
Нужны ли права администратора?
Да. Установка в системное хранилище или truststore требует прав администратора (sudo в Linux, запуск от имени администратора в Windows).
Нужно ли устанавливать сертификаты на все серверы?
Да. Сертификаты нужны в каждом окружении, из которого выполняются запросы к API: на каждом сервере, в каждом контейнере, в каждом приложении со своим хранилищем.
Повлияет ли установка на другие сервисы на том же сервере?
Нет. Вы только добавляете два доверенных сертификата — это не затрагивает уже установленные сертификаты и работу других приложений.
Я работаю с API из кода. Нужно ли настраивать браузер?
Нет. Если запросы к API идут программно, настраивать нужно серверное окружение или приложение, а не браузер.
Установил сертификаты, но ошибка осталась. Почему?
Частые причины:
- установлен только один сертификат из двух
- приложение использует собственное хранилище (Python, Node.js, Java) и не видит системное
- не обновлено хранилище после копирования файлов
- сертификат в формате DER вместо PEM.
Разбор по шагам — в разделе «Частые проблемы».
Доступом к серверу управляет хостинг-провайдер. Что делать?
Если у вас нет доступа к серверному окружению, передайте эту инструкцию вашему хостинг-провайдеру или системному администратору — установку сертификатов выполняют на стороне сервера.
Нужно ли перезапускать сервер после установки?
Сервер целиком — не обязательно, но приложение или сервис, выполняющий запросы, нужно перезапустить, чтобы он подхватил обновлённое хранилище. Для приложений в контейнерах — пересобрать образ и перезапустить контейнер.