Реализация квалифицированной электронной подписи (КЭП) на сайте

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация квалифицированной электронной подписи (КЭП) на сайте
Сложная
~2-4 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Реализация квалифицированной электронной подписи (КЭП) на сайте

Квалифицированная электронная подпись (КЭП) — единственный вид ЭП, равнозначный собственноручной подписи по российскому законодательству (ФЗ-63). Это не визуальная подпись и не простая ЭП: КЭП создаётся с помощью квалифицированного сертификата (выдаётся аккредитованными УЦ) и криптографического программного обеспечения (СКЗИ).

Технический стек

КриптоПро 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;  // 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,  // BES = без метки времени
    true  // detached = отсоединённая подпись
  );

  return signature;
}

Форматы подписи

Формат Описание Применение
CAdES-BES Базовый, без метки времени Большинство документов
CAdES-T + метка времени Когда нужна фиксация времени
CAdES-XL + проверка отзыва сертификата Архивное хранение
XAdES XML документы ЭДО, налоговая
PAdES PDF Подписание 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,  // CAdES-BES
          HashAlgorithm: 'GOST3411-2012-256',
        },
        Content: { IsDetached: true, HashValue: documentHash },
      },
      OperationID: crypto.randomUUID(),
    }),
  });

  const { TransactionID } = await response.json();

  // Отправить SMS с кодом подтверждения
  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; // base64 подпись
}

Верификация подписи

// Проверка через КриптоПро WebService
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,
  };
}

Юридические требования

  • Сертификат должен быть выдан аккредитованным УЦ (реестр на сайте Минцифры)
  • СКЗИ должно быть сертифицировано ФСБ
  • Для сделок с недвижимостью, нотариальных действий — дополнительные требования
  • Хранение документов с КЭП — не менее срока исковой давности (3–10 лет)

Сроки

Интеграция с КриптоПро Browser Plugin: UI, список сертификатов, подписание CAdES-BES — 7–10 дней. Облачная КЭП через КриптоПро DSS с SMS-подтверждением — 7–10 дней. Верификация подписей с проверкой сертификата — 3–5 дней.