При интеграции 1С с различными государственными или зарубежными системами часто возникает необходимость подписания XML-документов электронной подписью. Разработчики 1С часто используют для этого механизмы Библиотеки стандартных подсистем (БСП). Однако в процессе работы программисты сталкиваются с тем, что штатные инструменты 1С ориентированы на российские стандарты криптографии (ГОСТ). Давайте подробно разберем, почему возникают сложности при попытке использовать RSA и как с этим работать.
Когда мы используем возможности XMLDSig.ПодписатьДокумент в составе БСП, мы фактически вызываем встроенные механизмы криптопровайдера. В процессе разработки мы можем столкнуться с необходимостью использования конкретного алгоритма, например, www.w3.org/2000/09/xmldsig#rsa-sha1. При вызове функции мы обычно передаем следующие параметры:
XMLDSig.ПодписатьДокумент(
Оповещение_,
Сертификат_,
Заголовок_,
ДокументXML_,
ПодписываемыеДанные_,
ДополнительныеДанные_,
ШаблонSignature_,
МестоВставки_
);
Проблема заключается в том, что в результате работы функции XMLDSig мы видим в XML-файле алгоритм gostr34102012-gostr34112012-256. Это ожидаемое поведение для БСП, так как подсистема спроектирована для работы с российскими сертификатами. Попытка вручную заменить строку SignatureMethod внутри XML-файла после того, как подпись уже сформирована, не принесет результата. Давайте выясним, почему так происходит.
Важно понимать: электронная подпись — это не просто запись в файле, это результат математического преобразования данных с помощью закрытого ключа. Если ключ был выпущен по ГОСТ, то попытка подписать его как RSA приведет к невалидной подписи. Проверяющая система при попытке декодировать такую подпись получит ошибку, так как структура данных и математические алгоритмы RSA и ГОСТ принципиально отличаются.
Если ваша задача требует использования алгоритма RSA, который БСП не поддерживает «из коробки», мы предлагаем рассмотреть следующие подходы:
System.Security.Cryptography), поддерживающих RSA. 1С будет обращаться к этой библиотеке как к COM-объекту.OpenSSL или специализированные средства для работы с XML-подписями. В этом сценарии 1С сохраняет XML во временный файл, вызывает утилиту через ЗапуститьПриложение, получает подписанный файл и считывает его содержимое обратно.Итак, мы разобрали ситуацию и выяснили, что стандартные функции XMLDSig в БСП жестко привязаны к российским стандартам шифрования. Попытка подмены значений в XML не является решением, так как она нарушает целостность криптографической защиты документа. Если использование RSA является обязательным, мы рекомендуем проектировать интеграцию с использованием внешних средств разработки, которые позволяют управлять процессом подписи на более низком уровне, минуя ограничения БСП.