Автоматизация проверки и визуализации ЭП с использованием КриптоАРМ Server
Проверяйте электронные подписи автоматически — одним 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 с уже встроенной подписью;/xml/verify— XMLDSig для XML. Ответ дополнительно сообщает, по какой схеме подпись —isSMEVSignature(СМЭВ) илиisFCSSignature(Free Customs Scheme).
curl -X POST https://<host>/pades/verify \
-H "Content-Type: application/json" \
-d '{"pdf": "JVBERi0xLjQK…=="}'
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.