Интеграция с API Росфинмониторинга (РФМ) является нетривиальной задачей для разработчика 1С. Основная сложность заключается в необходимости использования защищенного соединения по российским криптографическим стандартам (ГОСТ). Встроенные механизмы платформы 1С, использующие библиотеку OpenSSL, зачастую не поддерживают ГОСТ «из коротки», что приводит к ошибкам вроде 404 Not Found или сбоям при установке SSL-сессии. Рассмотрим подробный алгоритм решения этой проблемы с использованием специализированного программного обеспечения и корректировкой программного кода.
Когда мы пытаемся установить соединение через объект ЗащищенноеСоединениеOpenSSL, платформа обращается к системным библиотекам или встроенному OpenSSL. Если на сервере РФМ настроен строгий контроль ГОСТ-сертификатов на порту 8081, обычный HTTPS-запрос от 1С завершается неудачей. Ошибка 404 в данном контексте часто является ложной: сервер может отдавать её, если обращение произошло на стандартный порт без правильной криптографии или если запрос был перенаправлен некорректно. Для стабильной работы нам потребуется «прослойка», которая возьмет на себя шифрование трафика по ГОСТу.
Проанализируем наиболее надежный метод — использование программы Stunnel. Важно использовать именно сборку от компании «КриптоПро» (stunnel-msspi), так как стандартная версия Stunnel также не поддерживает ГОСТ. Эта утилита создаст локальный «туннель»: 1С будет отправлять обычный HTTP-запрос на локальный адрес, а Stunnel будет шифровать его и пересылать на сервер Росфинмониторинга.
Порядок настройки службы Stunnel:
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
Разберем параметры конфигурации:
accept = 127.0.0.1:8383 — порт на локальной машине, который будет «слушать» 1С.connect = portal.fedsfm.ru:8081 — реальный адрес и порт сервисного концентратора РФМ для ГОСТ-соединений.cert — путь к экспортированному файлу вашего открытого ключа (сертификата).verify = 2 — уровень проверки сертификата сервера.Важный нюанс: Служба Stunnel должна запускаться от имени пользователя, которому доступны сертификаты в хранилище Windows. Если вы запускаете 1С в серверном режиме, убедитесь, что учетная запись службы 1C:Enterprise Server имеет доступ к закрытым ключам сертификатов.
После запуска туннеля наше 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 является стандартной частью интеграции.
Иначе
Сообщить("Ошибка авторизации: " + Ответ.КодОтвета);
КонецЕсли;
Проанализируем типичные ошибки при выполнении последующих запросов к сервису. Документация РФМ может содержать неточности, которые критичны для работы программного кода.
Исправление заголовка авторизации: В официальных инструкциях часто указывается заголовок 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, проверьте следующие моменты:
stunnel-log.txt. Если в логе есть запись msspi: verify OK, значит SSL-туннель успешно построен, и проблему нужно искать в коде 1С (заголовки, URL, тело запроса).Использование связки 1С + Stunnel (КриптоПро) является проверенным индустриальным стандартом для взаимодействия с государственными ИС. Это позволяет обойти ограничения платформы 1С по работе с национальными алгоритмами шифрования и обеспечить безопасную передачу данных в Росфинмониторинг.