Установка корневого сертификата HARICA для H2H-соединения
Если ваш сервер обращается к API интернет-эквайринга (securepay.tinkoff.ru, acqapi.tinkoff.ru), но в доверенном хранилище окружения отсутствует корневой сертификат HARICA, запросы могут завершаться ошибкой проверки TLS-сертификата:
certificate verify failed;unable to get local issuer certificate;PKIX path building failed.
Чтобы установить доверенное соединение, добавьте корневой сертификат HARICA в доверенное хранилище серверного окружения.
Сертификат имеет CN HARICA TLS RSA Root CA 2021.
Шаг 1. Скачайте сертификат
curl -o harica.crt https://developer.tbank.ru/harica.crt
Несмотря на расширение .crt, сертификат представлен в PEM-формате и должен начинаться со строки:
-----BEGIN CERTIFICATE-----
Проверьте формат и данные сертификата:
openssl x509 -in harica.crt -noout -subject -issuer -dates -fingerprint -sha256
Если команда завершается ошибкой, убедитесь, что файл скачался полностью и не содержит HTML-страницу вместо сертификата.
Шаг 2. Установите сертификат
Выберите способ установки для вашего окружения.
Linux: Debian / Ubuntu
sudo cp harica.crt /usr/local/share/ca-certificates/harica.crt
sudo update-ca-certificates
Linux: RHEL / CentOS / AlmaLinux / Rocky Linux
sudo cp harica.crt /etc/pki/ca-trust/source/anchors/harica.crt
sudo update-ca-trust
Java / JVM
Создайте отдельный truststore:
keytool -importcert \
-alias harica-root \
-file harica.crt \
-keystore harica-truststore.jks \
-storepass <пароль> \
-noprompt
Подключите truststore при запуске приложения:
java \
-Djavax.net.ssl.trustStore=/path/to/harica-truststore.jks \
-Djavax.net.ssl.trustStorePassword=<пароль> \
-jar app.jar
Python: requests
После установки сертификата в системное хранилище дополнительные настройки обычно не требуются.
Если приложение использует собственный набор доверенных сертификатов, добавьте HARICA в общий CA bundle и укажите путь к нему:
export REQUESTS_CA_BUNDLE=/path/to/ca-bundle.crt
Не указывайте файл, содержащий только HARICA, если приложение также обращается к другим HTTPS-ресурсам. Используйте общий bundle со всеми необходимыми доверенными сертификатами.
Python: aiohttp
Передайте сертификат через SSLContext:
import ssl
import aiohttp
ssl_context = ssl.create_default_context(cafile="/path/to/ca-bundle.crt")
async with aiohttp.ClientSession() as session:
async with session.get(
"https://securepay.tinkoff.ru/",
ssl=ssl_context,
) as response:
print(response.status)
Node.js
Файл, указанный в NODE_EXTRA_CA_CERTS, должен содержать сертификат в PEM-формате:
NODE_EXTRA_CA_CERTS=/path/to/harica.crt node app.js
Переменную необходимо задать до запуска процесса Node.js.
Docker
Добавьте сертификат в образ на этапе сборки:
COPY harica.crt /usr/local/share/ca-certificates/harica.crt
RUN update-ca-certificates
После изменения сертификата пересоберите образ и перезапустите контейнер.
Windows / .NET / IIS
Запустите PowerShell с правами администратора:
Import-Certificate `
-FilePath "C:\certs\harica.crt" `
-CertStoreLocation Cert:\LocalMachine\Root
После установки перезапустите приложение, службу или пул приложений IIS.
Шаг 3. Проверьте соединение
curl -v https://securepay.tinkoff.ru/
curl -v https://acqapi.tinkoff.ru/
Соединение должно устанавливаться без ошибок проверки TLS-сертификата.
Посмотреть цепочку сертификатов можно командой:
openssl s_client \
-connect securepay.tinkoff.ru:443 \
-servername securepay.tinkoff.ru \
-showcerts \
</dev/null
Проверить только сертификат сервера:
openssl s_client \
-connect securepay.tinkoff.ru:443 \
-servername securepay.tinkoff.ru \
</dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
После установки сертификата перезапустите приложения и сервисы, которые загружают доверенные сертификаты только при старте.