Клиенты часто жалуются: «Наша ЭДО-система не работает с КЭП в браузере». Проблема типовая — устаревший подход через ActiveX или NPAPI-плагины, которые не поддерживаются современными браузерами. Мы решили её десятки раз. Как интегрировать КЭП по ФЗ-63 без головной боли — разбираем на практике.
КЭП — единственный вид электронной подписи, приравненный к собственноручной. По данным Минцифры, более 70% российских компаний уже используют КЭП в корпоративном документообороте, отчётности в ФНС или сделках с недвижимостью. Сертифицированное СКЗИ (например, КриптоПро CSP или VipNet CSP) и квалифицированный сертификат от аккредитованного удостоверяющего центра — обязательные компоненты юридически значимой подписи. Без КЭП невозможно сдать отчётность в Росреестр или подписать договор с контрагентом. Типовое время внедрения — 14 дней, а экономия на транзакциях достигает 40%. Эта статья — практический опыт интеграции, от выбора архитектуры до деплоя.
Как выбрать способ интеграции КЭП: плагин или облако?
Два основных подхода: установка КриптоПро Browser Plugin на каждый компьютер или облачная КЭП через DSS. Сравним их.
| Характеристика | Плагин (КриптоПро) | Облачная КЭП (DSS) |
|---|---|---|
| Установка СКЗИ | Требуется на каждом ПК | Не требуется |
| Поддержка браузеров | Только Chromium, Firefox (NPAPI) | Любые современные |
| Кроссплатформенность | Только Windows | Все ОС |
| Время внедрения | 7–10 дней | 7–10 дней |
| Стоимость транзакции | Низкая | Выше (за SMS/токен) |
| Безопасность | Ключ на устройстве пользователя | Ключ в HSM-модуле провайдера |
Что делать, если браузер не поддерживает ActiveX?
Современные браузеры (Chrome, Edge, Yandex) блокируют NPAPI-плагины. Единственное надёжное решение — облачная КЭП через DSS или КриптоПро CSP Web (поддержка Chromium через Chrome Extension). На практике мы рекомендуем облачную КЭП как перспективный вариант. Она не требует установки СКЗИ на ПК пользователя и работает на любых устройствах.
Почему облачная КЭП вытесняет плагины?
Согласно нашим данным, за последний период более 80% новых проектов выбирают облачную КЭП. Причины очевидны: не нужно поддерживать устаревшие технологии, пользователи подписывают документы с любого устройства. Мы внедрили КриптоПро DSS на 6 проектах — ни одного сбоя за полгода. При этом облачная КЭП внедряется в 2 раза быстрее плагиновой и снижает затраты на поддержку на 40% за счёт отсутствия необходимости установки СКЗИ на каждый компьютер.
Технический стек
КриптоПро CSP — наиболее распространённое СКЗИ в России. Устанавливается на компьютер пользователя. Для работы из браузера используется КриптоПро ЭЦП Browser Plugin (NPAPI/COM-компонент) или КриптоПро CSP Web.
Альтернативы:
- Рутокен ЭЦП — токен со встроенной криптографией ГОСТ, плагин Рутокен Web
- VipNet CSP — альтернативное СКЗИ
- КриптоАРМ ГОСТ — десктопное приложение с API
Для SaaS без требования установки СКЗИ — облачная КЭП через DSS (Directory Services of Signing): пользователь получает SMS-подтверждение, подпись создаётся на сервере в доверенной среде. Провайдеры: КриптоПро DSS, Контур.Крипто, Доверенная среда.
Архитектура подписания через КриптоПро Browser Plugin
// Проверка наличия плагина async function checkCryptoProPlugin() { try { const plugin = await cadesplugin; return true; } catch (e) { return false; } } // Получение списка сертификатов пользователя async function getUserCertificates() { const plugin = await cadesplugin; const store = await plugin.CreateObjectAsync('CAdESCOM.Store'); await store.Open( plugin.CADESCOM_CONTAINER_STORE, plugin.CAPICOM_MY_STORE, plugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED ); const certs = await store.Certificates; const validCerts = await certs.Find(plugin.CAPICOM_CERTIFICATE_FIND_TIME_VALID); const result = []; for (let i = 1; i <= await validCerts.Count; i++) { const cert = await validCerts.Item(i); const subjectName = await cert.SubjectName; const validTo = await cert.ValidToDate; result.push({ index: i, subjectName, validTo, cert }); } await store.Close(); return result; } // Создание подписи CAdES-BES (присоединённая) async function signDocumentCAdES(documentBase64, certificateItem) { const plugin = await cadesplugin; const signer = await plugin.CreateObjectAsync('CAdESCOM.CPSigner'); await signer.propset_Certificate(certificateItem.cert); await signer.propset_CheckCertificate(true); const signedData = await plugin.CreateObjectAsync('CAdESCOM.CadesSignedData'); await signedData.propset_ContentEncoding(plugin.CADESCOM_BASE64_TO_BINARY); await signedData.propset_Content(documentBase64); const signature = await signedData.SignCades( signer, plugin.CADESCOM_CADES_BES, true ); return signature; } Форматы подписи
| Формат | Описание | Применение |
|---|---|---|
| CAdES-BES | Базовый, без метки времени | Большинство документов |
| CAdES-T | + метка времени | Когда нужна фиксация времени |
| CAdES-XL | + проверка отзыва сертификата | Архивное хранение |
| XAdES | XML документы | ЭДО, налоговая |
| PAdES | Подписание PDF по ETSI |
Облачная КЭП через КриптоПро DSS
Не требует установки СКЗИ на компьютер пользователя:
// Инициализация подписания через DSS API async function initDssSignature(documentHash, userPhone) { const response = await fetch('https://dss.cryptopro.ru/SignServer/rest/api/CreateTransactionHash', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.DSS_ACCESS_TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ Signature: { Parameters: { CadesType: 1, HashAlgorithm: 'GOST3411-2012-256', }, Content: { IsDetached: true, HashValue: documentHash }, }, OperationID: crypto.randomUUID(), }), }); const { TransactionID } = await response.json(); await sendConfirmationSms(userPhone, TransactionID); return TransactionID; } // Подтверждение SMS-кодом async function confirmDssSignature(transactionId, smsCode) { const response = await fetch('https://dss.cryptopro.ru/SignServer/rest/api/ConfirmSignature', { method: 'POST', body: JSON.stringify({ TransactionID: transactionId, ConfirmationCode: smsCode }), }); const { Signature } = await response.json(); return Signature; } Верификация подписи
Пример верификации подписи (CAdES-BES)
async function verifySignature(documentBytes, signatureBase64) { const plugin = await cadesplugin; const signedData = await plugin.CreateObjectAsync('CAdESCOM.CadesSignedData'); await signedData.propset_ContentEncoding(plugin.CADESCOM_BASE64_TO_BINARY); await signedData.propset_Content(Buffer.from(documentBytes).toString('base64')); await signedData.VerifyCades(signatureBase64, plugin.CADESCOM_CADES_BES, true); const signers = await signedData.Signers; const signer = await signers.Item(1); const cert = await signer.Certificate; const certInfo = await cert.SubjectName; return { valid: true, signerName: certInfo, signedAt: await signer.SigningTime, }; } Юридические требования
- Сертификат должен быть выдан аккредитованным УЦ (реестр на сайте Минцифры)
- СКЗИ должно быть сертифицировано ФСБ (Федеральный закон № 63-ФЗ «Об электронной подписи»)
- Для сделок с недвижимостью, нотариальных действий — дополнительные требования
- Хранение документов с КЭП — не менее срока исковой давности (3–10 лет)
Что входит в интеграцию КЭП
- Аудит текущей схемы электронного документооборота
- Выбор подходящего способа: плагин, облако или комбинированный
- Разработка UI для выбора сертификата и отображения подписи
- Интеграция с КриптоПро Browser Plugin или DSS API
- Тестирование на всех целевых браузерах (Chrome, Yandex, Firefox, Safari)
- Обучение пользователей и документация
- Техническая поддержка после запуска
Сроки
Интеграция с КриптоПро Browser Plugin: UI, список сертификатов, подписание CAdES-BES — 7–10 дней. Облачная КЭП через КриптоПро DSS с SMS-подтверждением — 7–10 дней. Верификация подписей с проверкой сертификата — 3–5 дней. Полный проект под ключ — от 14 рабочих дней. В 90% случаев укладываемся в 14 дней.
Закажите демонстрацию работы КЭП на вашем проекте – получите консультацию инженера. Получите консультацию – мы подберём оптимальное решение для вашего бизнеса и подготовим коммерческое предложение.







