Как получить описание методов недокументированных внешних компонент 1С для работы с ЭП?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки интеграций с государственными сервисами, такими как СМЭВ или различные порталы госуслуг, перед программистами 1С часто встает задача работы с электронной подписью. Нередко выясняется, что для решения специфических задач уже существуют готовые компоненты, входящие в состав платформы или библиотеки БСП, такие как ExtraCryptoAPIAddInNative или libXadesAddIn. Однако официальная документация по ним практически отсутствует.

Давайте разберем, как нам «заглянуть внутрь» этих компонент и изучить недокументированные возможности платформы, не прибегая к написанию собственного «велосипеда» с нуля.

Понимание природы внутренних компонент

Важно осознать, что ExtraCryptoAPIAddInNative и аналогичные модули — это внутренние инструменты 1С. Фирма «1С» использует их как «черный ящик» для реализации функционала БСП. Это означает следующее:

  1. Официальной документации для разработчиков не существует, поэтому приходится выполнять анализ структуры метаданных самостоятельно.
  2. Интерфейс компонентов может быть изменен разработчиками платформы в любом обновлении.
  3. Использование этих функций требует осторожности, так как они не предназначены для широкого применения.

Метод интроспекции через Native API

Самый эффективный способ узнать, что умеет компонента, — это программно опросить её. В 1С компоненты подключаются как Native API. Мы можем использовать методы объекта для получения списка всех доступных функций.

Рассмотрим, как это выглядит на практике. Когда мы подключаем компоненту, она предоставляет объект, у которого можно запросить список методов. Благодаря сообществам разработчиков, мы уже знаем структуру методов для ExtraCryptoAPI.

Ниже приведен список основных методов, которые удалось выявить путем анализа:

Пример работы с криптографией без COM-объекта на Linux

Часто возникает вопрос: как работать с криптографией на Linux, где нет привычных COM-объектов Windows (например, CAdESCOM.HashedData)? Разберем альтернативный подход к вычислению хеша.

Если нам необходимо вычислить хеш на стороне сервера Linux, мы можем использовать следующий алгоритм работы:


// Инициализация параметров
CADESCOM_BASE64_TO_BINARY = 1;
CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = 101;

// Работа с объектом HashedData
HashedData = Новый COMОбъект("CAdESCOM.HashedData");
HashedData.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
HashedData.DataEncoding = CADESCOM_BASE64_TO_BINARY;
HashedData.Hash(СертификатКриптографииBase64);

// Получение результата
Хэш_HEXстрока = HashedData.Value;
Хэш_ДвочиныеДанные = ПолучитьДвоичныеДанныеИзHexСтроки(Хэш_HEXстрока);
digest = Base64Строка(Хэш_ДвочиныеДанные);

В среде Linux, где COM недоступен, рекомендуется использовать официальные утилиты КриптоПро, например cryptcp, вызывая их через команду ЗапуститьПриложение(). Это наиболее стабильный путь, который не зависит от внутренних изменений в платформе 1С.

Рекомендации по реализации интеграций

Проанализировав ситуацию, можно сделать следующие выводы для нашей работы:

  1. Не доверяйте «черным ящикам» в критическом коде. Если проект критичен, надежнее использовать консольные утилиты или собственную внешнюю компоненту, написанную на C# или C++, которая будет гарантировать неизменность API.
  2. Изучайте код БСП. Если вам нужно использовать ExtraCryptoAPI, посмотрите, как это делает сама 1С в модулях БСП. Это даст вам понимание правильной последовательности параметров для методов Sign или XadesTSign.
  3. Применяйте интроспекцию. Если вы работаете с неизвестной компонентой, используйте механизмы Native API или MCP сервер для поиска функций. Это позволит вам сэкономить часы на поиске информации в интернете.

Помните, что использование недокументированных функций — это временное решение для закрытия «узких мест». Всегда стремитесь к использованию официальных интерфейсов производителя криптопровайдера, чтобы ваша система оставалась обновляемой и стабильной в долгосрочной перспективе.

← На главную