Как настроить подключение 1С к сервисному концентратору Росфинмониторинга по ГОСТ TLS?

Программист 1С v8.3 (Обычные формы) Финансы и профессиональные услуги
← На главную

Интеграция с API Росфинмониторинга (РФМ) является нетривиальной задачей для разработчика 1С. Основная сложность заключается в необходимости использования защищенного соединения по российским криптографическим стандартам (ГОСТ). Встроенные механизмы платформы 1С, использующие библиотеку OpenSSL, зачастую не поддерживают ГОСТ «из коротки», что приводит к ошибкам вроде 404 Not Found или сбоям при установке SSL-сессии. Рассмотрим подробный алгоритм решения этой проблемы с использованием специализированного программного обеспечения и корректировкой программного кода.

Причина возникновения ошибок при прямом подключении

Когда мы пытаемся установить соединение через объект ЗащищенноеСоединениеOpenSSL, платформа обращается к системным библиотекам или встроенному OpenSSL. Если на сервере РФМ настроен строгий контроль ГОСТ-сертификатов на порту 8081, обычный HTTPS-запрос от 1С завершается неудачей. Ошибка 404 в данном контексте часто является ложной: сервер может отдавать её, если обращение произошло на стандартный порт без правильной криптографии или если запрос был перенаправлен некорректно. Для стабильной работы нам потребуется «прослойка», которая возьмет на себя шифрование трафика по ГОСТу.

Шаг 1: Настройка Stunnel от КриптоПро

Проанализируем наиболее надежный метод — использование программы Stunnel. Важно использовать именно сборку от компании «КриптоПро» (stunnel-msspi), так как стандартная версия Stunnel также не поддерживает ГОСТ. Эта утилита создаст локальный «туннель»: 1С будет отправлять обычный HTTP-запрос на локальный адрес, а Stunnel будет шифровать его и пересылать на сервер Росфинмониторинга.

Порядок настройки службы Stunnel:

  1. Установим КриптоПро CSP и Stunnel-msspi на машину, где выполняется код (сервер или рабочая станция).
  2. Убедимся, что в системном хранилище сертификатов (Личное) установлен действующий сертификат организации, выданный для работы с РФМ, и для него доступен закрытый ключ.
  3. Подготовим файл конфигурации stunnel.conf. Проверить корректность прохождения запросов через прокси поможет обработка для тестирования http сервисов — для этого подойдёт универсальная консоль тестирования HTTP-запросов и API в 1С. Рассмотрим пример рабочих настроек:

output = C:\stunnel\stunnel-log.txt
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
debug = 7

[rfm_service]
client = yes
accept = 127.0.0.1:8383
connect = portal.fedsfm.ru:8081
cert = C:\stunnel\client_cert.cer
verify = 2

Разберем параметры конфигурации:

Важный нюанс: Служба Stunnel должна запускаться от имени пользователя, которому доступны сертификаты в хранилище Windows. Если вы запускаете 1С в серверном режиме, убедитесь, что учетная запись службы 1C:Enterprise Server имеет доступ к закрытым ключам сертификатов.

Шаг 2: Реализация авторизации в 1С

После запуска туннеля наше HTTPСоединение в 1С больше не нуждается в объекте ЗащищенноеСоединениеOpenSSL, так как шифрование происходит на уровне Stunnel. Выясним, как правильно отправить запрос на авторизацию для получения JWT-токена — аутентификация стандартными средствами 1С вполне справляется с этой задачей.


// Подключаемся к локальному порту Stunnel
Соединение = Новый HTTPСоединение("127.0.0.1", 8383);

СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("userName", "Ваш_Логин_РФМ");
СтруктураЗапроса.Вставить("password", "Ваш_Пароль");

// Сериализация в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
ТелоЗапроса = ЗаписьJSON.Закрыть();

ХТЗаголовки = Новый Соответствие;
ХТЗаголовки.Вставить("Content-Type", "application/json");

// Путь к методу авторизации.
ПутьКМетоду = "services/fedsfm-service/test-contur/authenticate";
ХТЗапрос = Новый HTTPЗапрос(ПутьКМетоду, ХТЗаголовки);
ХТЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);

Ответ = Соединение.ОтправитьДляОбработки(ХТЗапрос);

Если Ответ.КодОтвета = 200 Тогда
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
    Токен = ДанныеОтвета.accessToken; // Механизм получения токена через API является стандартной частью интеграции.
Иначе
    Сообщить("Ошибка авторизации: " + Ответ.КодОтвета);
КонецЕсли;

Шаг 3: Работа с заголовками и методами API

Проанализируем типичные ошибки при выполнении последующих запросов к сервису. Документация РФМ может содержать неточности, которые критичны для работы программного кода.

Исправление заголовка авторизации: В официальных инструкциях часто указывается заголовок Authenticate. Однако на практике сервер ожидает стандартный заголовок Authorization. Без этого исправления вы будете постоянно получать ошибку 401 Unauthorized или 403 Forbidden.


ХТЗаголовки = Новый Соответствие;
// Правильный формат передачи токена:
ХТЗаголовки.Вставить("Authorization", "Bearer " + Токен);

Проблема типов контента (Content-Type): Рассмотрим ситуацию с методом скачивания реестров (например, перечня экстремистов). Несмотря на то, что многие методы принимают JSON, некоторые операции требуют передачи данных в формате application/x-www-form-urlencoded. Если вы отправите JSON там, где ожидается x-www-form-urlencoded, сервер может вернуть внутреннюю ошибку 500.

Пример правильной упаковки параметров для таких методов:


// Вместо JSON структуры передаем строку параметров
ТелоЗапроса = "id=" + ИдентификаторРеестра; 
ХТЗаголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");

Диагностика проблем соединения

Если вы всё еще получаете 403 Forbidden, проверьте следующие моменты:

Использование связки 1С + Stunnel (КриптоПро) является проверенным индустриальным стандартом для взаимодействия с государственными ИС. Это позволяет обойти ограничения платформы 1С по работе с национальными алгоритмами шифрования и обеспечить безопасную передачу данных в Росфинмониторинг.

← На главную