К статье
Практический материал

Администрирование · 12 мин

Как подписать программу в 1С электронной подписью

Как подписать программу, внешнюю обработку или расширение в 1С электронной подписью: получение сертификата, настройка криптопровайдера, подписание кода.

Подписание программы в 1С электронной подписью решает две задачи: подтверждает авторство разработчика и гарантирует, что код не изменялся после подписания. Это требуется при распространении внешних обработок и отчётов, публикации расширений конфигурации, а также при работе в режиме сервиса, где неподписанные внешние компоненты могут быть заблокированы настройками безопасности.

Под «подписанием программы» в контексте 1С обычно понимают три разных сценария: подписание файла внешней обработки или отчёта (epf, erf), подписание расширения конфигурации (cfe) и подписание исполняемых модулей и внешних компонент. Во всех случаях используется криптография на основе сертификата ключа электронной подписи, но инструменты и порядок действий отличаются.

Подпись формируется средствами криптопровайдера (например, КриптоПро CSP или ViPNet CSP) и проверяется платформой 1С при загрузке файла. Если сертификат недействителен, отозван или цепочка доверия не строится, система откажется принимать подписанный объект либо выдаст предупреждение. Поэтому перед подписанием важно подготовить рабочее место: установить криптопровайдер, действующий сертификат и корневые сертификаты удостоверяющего центра.

Какие объекты 1С можно подписать и зачем это нужно

Чаще всего подписывают внешние обработки и отчёты — файлы с расширениями epf и erf. Подпись позволяет администратору базы убедиться, что обработка получена именно от заявленного разработчика и не была изменена при передаче. В режиме сервиса и в базах с жёсткими настройками безопасности неподписанные внешние файлы могут вообще не открываться.

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

Третий сценарий — подписание исполняемых файлов: внешних компонент, утилит, установщиков. Здесь используется стандартная подпись кода операционной системы (Authenticode для Windows), а не механизмы самой платформы. Такая подпись снимает предупреждения Windows SmartScreen и антивирусов при запуске файла пользователем.

Что подготовить перед подписанием

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

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

Также заранее уточните требования принимающей стороны: какой удостоверяющий центр признаётся доверенным, нужна ли метка доверенного времени, какой формат подписи ожидается. Несоблюдение этих условий — самая частая причина того, что формально корректная подпись отклоняется при проверке.

СертификатДействующий, с закрытым ключом

Срок действия не истёк, сертификат в хранилище «Личное», есть привязка к закрытому ключу

КриптопровайдерУстановлен и лицензирован

КриптоПро CSP или ViPNet CSP запускается, лицензия активна, версия совместима с ОС

Корневые сертификатыЦепочка доверия строится

Корневой сертификат УЦ установлен в «Доверенные корневые центры сертификации»

Требования получателяФормат и УЦ согласованы

Известно, какой УЦ и тип подписи принимает сторона, проверяющая файл

Как подписать внешнюю обработку или отчёт

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

Порядок действий через типовую подсистему выглядит так. Сначала в настройках электронной подписи добавляется сертификат и указывается программа криптопровайдера. Затем в форме файла или через обработку подписания выбирается нужный файл обработки, сертификат и выполняется команда «Подписать». Результат — файл подписи (обычно с расширением p7s или аналогичным), который передаётся вместе с обработкой.

Если типовой подсистемы нет, используется программный вызов: создаётся объект МенеджерКриптографии, указывается сертификат, вызывается метод подписания данных файла. Подобный код доступен любому разработчику, но требует аккуратности: ошибка в параметрах алгоритма приведёт к подписи, которую не сможет проверить другая сторона.

Подписание обработки через типовую подсистему
  1. 1
    Убедитесь, что криптопровайдер установлен и сертификат виден в системе
  2. 2
    В настройках электронной подписи добавьте сертификат и программу криптографии
  3. 3
    Откройте форму файла обработки или обработку подписания
  4. 4
    Выберите сертификат и выполните команду «Подписать»
  5. 5
    Передайте получателю файл обработки вместе с файлом подписи
  6. 6
    Попросите получателя выполнить проверку подписи до загрузки в рабочую базу

Как подписать расширение конфигурации

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

В облачных сценариях подпись расширения часто является обязательным условием: менеджер сервиса проверяет, что расширение подписано сертификатом из утверждённого списка, и только после этого допускает установку в абонентскую базу. Если вы разрабатываете расширение для такого контура, заранее запросите у владельца сервиса требования к сертификату и порядок его регистрации.

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

Подписание исполняемых файлов и внешних компонент

Исполняемые файлы (exe, dll, msi), которые поставляются вместе с решением на 1С — например, внешние компоненты по технологии Native API или COM, — подписываются средствами операционной системы, а не платформы. В Windows для этого используется утилита signtool из Windows SDK и сертификат подписи кода.

Команда подписания указывает файл, сертификат, алгоритм хеширования и желательно сервер меток времени. Метка времени важна: она фиксирует момент подписания, и подпись остаётся действительной даже после истечения срока сертификата, если файл был подписан, пока сертификат действовал.

cmd
signtool sign /fd SHA256 /a /tr http://timestamp.digicert.com /td SHA256 mycomponent.dll

Проверка выполняется той же утилитой с ключом verify либо через свойства файла в проводнике Windows, вкладка «Цифровые подписи». Если подпись отображается как действительная и цепочка сертификатов строится до доверенного корня, файл готов к распространению.

Как проверить подпись и убедиться в результате

Проверка — обязательный этап, который нельзя пропускать. Для файлов, подписанных средствами 1С, проверка выполняется на стороне получателя через тот же менеджер криптографии: указывается исходный файл и файл подписи, вызывается метод проверки. Успешная проверка возвращает сведения о сертификате подписанта и подтверждает целостность данных.

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

Контрольные точки

Как проверить результат

Проверка подписи файла
Норма

Подпись действительна, указан ожидаемый подписант

Тревожный признак

Ошибка проверки, «подпись не верна» или неизвестный подписант

Цепочка сертификатов
Норма

Цепочка строится до доверенного корня без предупреждений

Тревожный признак

«Сертификат издан неизвестным центром» или разрыв цепочки

Целостность файла
Норма

Файл после подписания не изменялся, хеш совпадает

Тревожный признак

Любая правка файла после подписания — проверка не проходит

Загрузка в базу
Норма

Обработка или расширение загружается без предупреждений безопасности

Тревожный признак

Платформа блокирует загрузку или ругается на подпись

Типичные ошибки и ограничения

Самая распространённая ошибка — подписание сертификатом, которому не доверяет принимающая сторона. Самоподписанный сертификат или сертификат корпоративного УЦ корректно подписывает файл, но на компьютере получателя проверка завершится ошибкой, если корневой сертификат УЦ там не установлен. Решение — заранее согласовать УЦ или передать корневой сертификат вместе с инструкцией по установке.

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

Также учитывайте ограничения: подпись не заменяет проверку безопасности кода и не делает вредоносный код безопасным — она лишь фиксирует авторство и целостность. А в режиме сервиса действуют дополнительные правила профилей безопасности, которые могут ограничивать работу внешних обработок независимо от наличия подписи.

Типичные ошибки
01
Подписание нефинальной версии файла — любая доработка после подписания требует повторного подписания, старая подпись бесполезна
02
Использование сертификата непризнанного УЦ — у получателя проверка завершается ошибкой цепочки доверия
03
Отсутствие метки времени при подписании exe — после истечения сертификата подпись становится недействительной
04
Передача файла без файла подписи — получателю нечего проверять, подписание теряет смысл
05
Проверка только на компьютере разработчика — ошибки на стороне получателя остаются незамеченными
Маршрут решения

Как выбрать способ подписания

Нужно передать внешнюю обработку или отчёт в другую организациюПодпишите файл через подсистему электронной подписи или менеджер криптографии и передайте файл подписи вместе с обработкой
Разрабатываете расширение для базы в режиме сервисаУточните требования владельца сервиса к сертификату и подпишите cfe зарегистрированным сертификатом
Поставляете внешнюю компоненту или установщик для WindowsИспользуйте signtool с сертификатом подписи кода и меткой доверенного времени
Подпись нужна только внутри одной компанииДостаточно сертификата корпоративного УЦ при условии, что его корневой сертификат установлен на всех рабочих местах
Итог

Что важно запомнить

Подписание программы в 1С требует действующего сертификата, настроенного криптопровайдера и подписания финальной версии файла. Способ зависит от типа объекта: обработки и расширения подписываются средствами платформы, исполняемые файлы — через signtool. Результат всегда проверяется на стороне получателя.

Частые вопросы

Можно ли подписать обработку самоподписанным сертификатом?

Технически — да, подпись будет сформирована корректно. Но у получателя проверка завершится ошибкой доверия, пока он вручную не установит ваш сертификат в доверенные корневые центры. Для внутреннего контура это допустимо, для внешних получателей лучше использовать сертификат аккредитованного УЦ.

Нужно ли заново подписывать обработку после небольшой правки?

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

Чем подписание кода отличается от подписания документов в 1С?

Механизм криптографии общий, но объект разный: при подписании документов подписываются данные документа или файл печатной формы, а при подписании программы — файл обработки, расширения или исполняемый модуль. Требования к сертификату и порядок проверки тоже различаются.

Почему получатель видит ошибку «цепочка сертификатов не построена»?

На его компьютере отсутствует корневой сертификат вашего удостоверяющего центра или промежуточные сертификаты. Передайте ему файл корневого сертификата УЦ и инструкцию по установке в хранилище «Доверенные корневые центры сертификации».

Делает ли подпись внешнюю обработку безопасной?

Нет. Подпись подтверждает автора и неизменность файла, но не проверяет код на вредоносность. Перед загрузкой любой внешней обработки в рабочую базу её следует проверять на тестовой копии и анализировать код, если есть сомнения в источнике.

Что делать, если сертификат истёк, а подписывать нужно сейчас?

Подписывать просроченным сертификатом нельзя — проверка у получателя завершится ошибкой. Перевыпустите сертификат в удостоверяющем центре и подпишите файлы заново. Для exe-файлов ранее подписанных с меткой времени старые подписи останутся действительными.