Автоматическое подписание обезличенным сертификатом
Подписывайте документы автоматически — без участия человека и без сложного кода. Один REST-запрос к КриптоАРМ Server, и обезличенная электронная подпись готова.
Что такое обезличенная подпись и зачем она бизнесу
Обезличенная электронная подпись использует сертификат без персональных данных владельца. Она выполняет роль печати организации и не закрепляется за конкретным сотрудником — поэтому идеально подходит для автоматического подписания в информационных системах: счета, акты, справки, выписки и любые другие массовые документы.
Сертификат выпускают:
- ФНС — для автоматического создания и проверки подписи в электронных документах;
- Банк России — квалифицированные обезличенные сертификаты для поднадзорных организаций;
- Федеральное казначейство — для нужд органов власти.
Область применения регулирует закон № 63-ФЗ «Об электронной подписи»: обезличенную подпись нельзя использовать в документах, которые уходят за пределы информационной системы, или для участия в госзакупках. Внутри автоматизированных систем — можно, если назначено ответственное лицо за процесс подписания.
Простой способ: подпись одним запросом
Вам не нужно разбираться в криптографии. Загрузите сертификат и данные — сервер вернёт готовую подпись в формате CMS.
curl -X POST https://<host>/cms/sign \
-H "Content-Type: application/json" \
-d '{
"cert": "MIIE…==",
"data": "SGVsbG8sIFdvcmxkIQ=="
"password": "******",
"detached": true
}'
Ответ — подпись в Base64:
{ "status": 200, "cms": "MIAGCSqGSIb3DQEHAqCAMI…" }
Всё. Ключевые параметры: cert — сертификат в Base64 (.cer, .crt, .pem, .pfx, .p12), data — подписываемые данные, password — пароль от ключевого контейнера. По умолчанию создаётся откреплённая подпись (detached: true) — документ и подпись хранятся отдельно, что удобно для систем ЭДО.
Подписание в три шага
- Подготовьте сертификат. Установите обезличенный сертификат в хранилище, к нему привязан закрытый ключ.
- Отправьте данные. Передайте файл или данные вместе с сертификатом и паролем.
- Получите подпись. Сервер возвращает CMS-подпись.
Подпись файла и пакетная подпись
Файл можно подписать напрямую, без ручной упаковки в Base64 — эндпоинт примет multipart-форму:
curl -X POST https://<host>/cms/sign-file \
-F "data=@dogovor.pdf" \
-F "cert=@obezlichennyy.cer" \
-F "password=******" \
-F "detached=true" \
-o dogovor.pdf.sig
Для массовых операций есть пакетная подпись — один запрос, несколько файлов, один сертификат:
curl -X POST https://<host>/cms/sign-file-batch \
-F "data=@schet_1.pdf" \
-F "data=@schet_2.pdf" \
-F "data=@schet_3.pdf" \
-F "cert=@obezlichennyy.cer" \
-F "password=******"
Ответ — подписи по каждому файлу:
{
"results": [
{ "fileName": "schet_1.pdf", "cms": "MIAGCS…" },
{ "fileName": "schet_2.pdf", "cms": "MIAGCS…" },
{ "fileName": "schet_3.pdf", "cms": "MIAGCS…" }
]
}
Для больших объёмов укажите callbackUrl — сервер примет запрос (HTTP 202), обработает пакет в фоне и отправит результат POST-запросом на ваш адрес. Так вы не держите соединение открытым, пока подписываются сотни документов.
Нужна усовершенствованная подпись?
По умолчанию создаётся базовая подпись CAdES-BES. Передав параметр cadesStandard, вы получаете долгосрочную подпись с меткой времени: CAdES-T, CAdES-X Long Type 1 или CAdES-A — они сохраняют юридическую значимость даже после истечения срока действия сертификата. Для этого передайте адрес службы штампов времени в tspServiceAddress.
curl -X POST https://<host>/cms/sign \
-H "Content-Type: application/json" \
-d '{
"cert": "MIIE…==",
"data": "SGVsbG8sIFdvcmxkIQ==",
"password": "******",
"cadesStandard": "CAdES-A",
"tspServiceAddress": "https://tsp.example.com"
}'
Не только CAdES: PAdES и XMLDSig
Обезличенным сертификатом можно подписать документ в любом из трёх стандартов — под каждый есть свой набор эндпоинтов:
- /cms/* — CAdES (CMS) — для любых файлов: договоры, счета, акты и произвольные данные.
- /pades/* — PAdES — для PDF: подпись встраивается прямо в документ, можно добавить визуальный штамп.
- /xml/* — XMLDSig — для XML-документов, в том числе по схемам СМЭВ и FCS (Free Customs Scheme).
Параметры везде одни и те же: сертификат, данные и пароль. Меняется только эндпоинт. Например, подпись PDF со штампом:
curl -X POST https://<host>/pades/sign \
-H "Content-Type: application/json" \
-d '{
"pdf": "JVBERi0xLjQK…==",
"cert": "MIIE…==",
"password": "******",
"addVisualStamp": true
}'
Ответ — подписанный PDF в Base64:
{ "status": 200, "signedPdf": "JVBERi0xLjQK…" }
Для XML укажите тип подписи в поле signatureType: SMEV (СМЭВ) или FCS.
Для тех, кто строит собственный сервис: SDK
REST API покрывает типовые сценарии. Если же вы создаёте специализированный сервис и хотите управлять криптографией на уровне кода, в состав КриптоАРМ Server входит SDK — модуль trusted-crypto. Это те же операции, что и в API, но как библиотека для Node.js:
const cert = trusted.pki.Certificate.load("mycertificate.cer", trusted.DataFormat.DER);
const sd = new trusted.cms.SignedData();
sd.policies = ["detached"];
sd.content = { type: trusted.cms.SignedDataContentType.buffer, data: "Hello world" };
sd.sign(cert);
sd.export();
Модуль поддерживает асинхронную подпись, соподпись нескольких сторон, усовершенствованную подпись CAdES-T/X/A и работу с хранилищем сертификатов.
Заключение
КриптоАРМ Server превращает обезличенную подпись в рабочий инструмент: один REST-запрос — и документ подписан, а пакетная подпись закрывает задачи массового ЭДО.
Готовы автоматизировать подписание? Напишите нам на support@trusted.ru — поможем с интеграцией и предоставим триальные лицензии.