Автоматизация проверки и визуализации ЭП с использованием КриптоАРМ Server

Александр Гаврилов · 24 авг 2026 · 6498 · Поделиться

Проверяйте электронные подписи автоматически — одним REST-запросом. КриптоАРМ Server подтвердит действительность подписи, сертификата и цепочки, а для PDF вернёт печатную форму со штампом.

Проверка подписи одним запросом

Отправьте подпись в формате CMS— сервер вернёт результат проверки. Для откреплённой подписи передайте и сам документ, чтобы проверить соответствие.

curl -X POST https://<host>/cms/verify \
   -H "Content-Type: application/json" \
   -d '{
     "cms": "MIAGCSqGSIb3DQEHAqCAMI…",
     "data": "JVBERi0xLjQK…=="
   }'

Ответ — признак действительности и сведения о каждом подписанте:

{
   "status": 200,
   "message": "",
   "isValid": true,
   "isValidSign": true,
   "signs": [
      {
       "cadesTypeName": "CAdES-BES",
       "certificate": {
         "version": 3,
         "status": true,
         "subjectFriendlyName": "Цифровые технологии",
         "issuerFriendlyName": "CRYPTO-PRO Test Center 2",
         "subjectName": "CN=Цифровые технологии",
         "issuerName": "E=support@cryptopro.ru\\r\\nC=RU\\r\\nL=Moscow\\r\\nO=CRYPTO-PRO LLC\\r\\nCN=CRYPTO-PRO Test Center 2",
         "notAfter": "2024-10-26T16:25:37.000Z",
         "notBefore": "2024-08-26T16:15:37.000Z",
         "serialNumber": "120064ECE1352507757C00A08B00020064ECE1",
         "thumbprint": "29063cd83537dbbd0a221705859b8f6e5bec5ad0",
         "signatureAlgorithm": "1.2.643.7.1.1.3.2",
         "signatureDigestAlgorithm": "1.2.643.7.1.1.2.2",
         "publicKeyAlgorithm": "1.2.643.7.1.1.1.1"
       },
       "certificateData": "MIIDEz...",
       "issuerName": "E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2",
       "serialNumber": "120064ECE1352507757C00A08B00020064ECE1",
       "signatureAlgorithm": "1.2.643.7.1.1.3.2",
       "signatureDigestAlgorithm": "1.2.643.7.1.1.2.2",
       "certs": \[
         {
           "status": true,
           "subjectFriendlyName": "Цифровые технологии",
           "issuerFriendlyName": "CRYPTO-PRO Test Center 2",
           "subjectName": "CN=Цифровые технологии",
           "issuerName": "E=support@cryptopro.ru\\r\\nC=RU\\r\\nL=Moscow\\r\\nO=CRYPTO-PRO LLC\\r\\nCN=CRYPTO-PRO Test Center 2",
           "notAfter": "2024-10-26T16:25:37.000Z",
           "notBefore": "2024-08-26T16:15:37.000Z",
           "serialNumber": "120064ECE1352507757C00A08B00020064ECE1",
           "thumbprint": "29063cd83537dbbd0a221705859b8f6e5bec5ad0",
           "signatureAlgorithm": "1.2.643.7.1.1.3.2",
           "signatureDigestAlgorithm": "1.2.643.7.1.1.2.2",
           "publicKeyAlgorithm": "1.2.643.7.1.1.1.1"
           }
       \],
       "isCertChainValid": true
     }
   ],
  "report": "string",
   "dataStamp": "string"
}

Несколько подписей можно проверить за раз, перечислив их в cms<\code> через запятую.

Визуализация штампа на PDF

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

  • фразу «Документ подписан электронной подписью»;
  • номер сертификата ключа подписи;
  • ФИО владельца сертификата;
  • срок действия сертификата;
  • дополнительные атрибуты (эмблему или логотип).

Согласно ГОСТ Р 7.0.97—2025 визуализация должна быть аналогична месту подписи в бумажном документе — видимой и читаемой.

Чтобы получить печатную форму подписанного PDF со штампом, вызовите метод штампа — он принимает откреплённую подпись и PDF-документ:

curl -X POST https://<host>/cms/stamp \
   -H "Content-Type: application/json" \
   -d '{
     "cms": "MIAGCSqGSIb3DQEHAqCAMI…",
     "data": "JVBERi0xLjQK…=="
   }'

Ответ — PDF со штампами в Base64:

{ "status": 200, "dataStamp": "JVBERi0xLjQK…" }

Тот же результат можно получить сразу при проверке — включите флаг includeDataStamp:

curl -X POST https://<host>/cms/verify \
   -H "Content-Type: application/json" \
   -d '{
     "cms": "MIAGCSqGSIb3DQEHAqCAMI…",
     "data": "JVBERi0xLjQK…==",
     "includeDataStamp": true
   }'

В ответе появится поле dataStamp — готовая печатная форма.

Отчёт о проверке

Для документов, отличных от PDF (или когда нужен полноценный протокол проверки), запросите PDF-отчёт:

curl -X POST https://<host>/cms/verify \
   -H "Content-Type: application/json" \
   -d '{
     "cms": "MIAGCSqGSIb3DQEHAqCAMI…",
     "data": "SGVsbG8sIFdvcmxkIQ==",
     "includeVerificationReport": true
   }'

В ответе появится поле report — PDF-отчёт в Base64. Его можно сохранить как юридически значимое подтверждение проверки.

Проверка файла напрямую

Файлы можно передавать без ручной упаковки в Base64 — через multipart-форму:

# Проверка
curl -X POST https://<host>/cms/verify-file \
   -F "cms=@document.sig" \
   -F "data=@document.pdf" \
   -F "includeVerificationReport=true"

# Печатная форма со штампом
curl -X POST https://<host>/cms/stamp-file \
   -F "cms=@document.sig" \
   -F "data=@document.pdf" \
   -o document-stamped.pdf

Не только CAdES: PAdES и XMLDSig

Проверка работает во всех трёх стандартах подписи — по своему эндпоинту на каждый:

  • /cms/verify — CAdES (CMS) для любых файлов;
  • /pades/verify — PAdES для PDF с уже встроенной подписью;
  • curl -X POST https://<host>/pades/verify \
       -H "Content-Type: application/json" \
       -d '{"pdf": "JVBERi0xLjQK…=="}'

  • /xml/verify — XMLDSig для XML. Ответ дополнительно сообщает, по какой схеме подпись — isSMEVSignature (СМЭВ) или isFCSSignature (Free Customs Scheme).
  • curl -X POST https://<host>/xml/verify \
       -H "Content-Type: application/json" \
       -d '{"xml": "PD94bWwgdmVyc2lvbj0iMS4w…=="}'

Проверка сертификата

Отдельный метод проверяет сам сертификат: срок действия, цепочку и отзыв по CRL, плюс аккредитацию удостоверяющего центра в доверенном списке TSL.

curl -X POST https://<host>/cert/verify \
   -H "Content-Type: application/json" \
   -d '{"cert": "MIIE…=="}'

Ответ:

{
   "isValid": true,
   "isCertChainValid": true,
   "isRevoked": false,
   "certStatus": "good",
   "isAccreditedCA": true,
   "verificationPassed": true
}

verificationPassed — итоговый результат: срок в порядке, цепочка построена, отзыва нет, УЦ аккредитован. Если сертификат отозван, вернутся isRevoked: true, certStatus: "revoked", причина и время отзыва.

Проверка квалифицированности подписи

Квалифицированная электронная подпись — это подпись с квалифицированным сертификатом, которая по закону № 63-ФЗ приравнивается к собственноручной. Для неё важно не только то, что подпись математически корректна, но и то, что сертификат подписанта выдал аккредитованный удостоверяющий центр.

Аккредитованные УЦ собраны в доверенный список TSL (Trusted Service List), который ведёт Минцифры России. КриптоАРМ Server сверяет сертификат с этим списком автоматически — настраивать ничего не нужно.

За квалифицированность в ответе /cert/verify отвечают два поля:

  • isAccreditedCA — сертификат выдан действующим аккредитованным УЦ;
  • verificationPassed — итог: срок + цепочка + отсутствие отзыва + аккредитация в TSL.

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

Для тех, кто строит собственный сервис: SDK

REST API закрывает типовые сценарии. Когда нужен контроль над каждым шагом проверки, используйте модули trusted-crypto и trusted-pdf из состава SDK. Проверка строится из трёх этапов: загрузка подписанных данных, проверка подписи, проверка сертификатов подписчиков.

// 1. Загрузка подписанного файла или импорт из буфера
const cms = new trusted.cms.SignedData();
cms.load("./document.sig");
// или: cms.import(cmsBuffer, trusted.DataFormat.DER);
// 2. Проверка подписи
const isValid = cms.verify();
console.log(`Подпись действительна: ${isValid}`);
// асинхронно: cms.verifyAsync((err, result) => { ... });

Для откреплённой подписи укажите, где лежит подписанный документ, — и проверьте конкретного подписчика при соподписи:

cms.content = {
   type: trusted.cms.SignedDataContentType.url,
   data: "./document.docx"
};
const signer = cms.signers().items(0); // первый подписчик
cms.verify(signer);

Проверка сертификатов подписчика — цепочка строится через хранилище КриптоПро, списки отзыва и промежуточные сертификаты подгружаются автоматически:

const certificate = cms.signers().items(0).certificate;
trusted.utils.Csp.buildChainAsync(certificate, (err, chain) => {
   if (err) throw err;
   for (let i = 0; i < chain.length; i++) {
     trusted.utils.Csp.verifyCertificateChainAsync(chain.items(i), (e, res) => {
       console.log(`Статус сертификата: ${res}`);
     });
   }
});

Модуль поддерживает стандарты от CAdES-BES до CAdES-A, работу с TSP и OCSP. trusted-pdf добавляет работу с PDF: сертификация документа, разметка областей под оттиски подписи, встраивание и проверка. Подробности — в репозитории trusted-crypto и trusted-pdf.

Заключение

КриптоАРМ Server объединяет проверку подписи и её визуализацию в одном REST-интерфейсе: один запрос — и у вас есть результат проверки, сведения о квалифицированности, печатная форма со штампом или отчёт. Начните с API, а SDK даст полную гибкость бизнес логики.

По вопросам интеграции пишите на support@trusted.ru.

Вернуться к списку новостей

Подпишитесь и получайте новые статьи по почте

Заполните поле Подписаться

Подписываясь, вы соглашаетесь на получение информационных сообщений от компании
ООО «Цифровые технологии» на условиях Политики конфиденциальности

Спасибо, что подписались
на нашу рассылку!

Узнавайте новости первыми —
подпишитесь на нашу новостную рассылку

Заполните поле
Подписаться

Подписываясь, вы соглашаетесь на получение информационных сообщений от компании
ООО «Цифровые технологии» на условиях Политики конфиденциальности

Спасибо, что подписались
на нашу рассылку!

Для повышения удобства работы и хранения данных веб-сайт CRYPTOARM.RU использует файлы COOKIE. Продолжая работу с веб-сайтом, Вы даете свое согласие на работу с этими файлами.