КриптоПро | КриптоПро ЭЦП Browser plug-in

Описание принципов работы плагина

КриптоПро ЭЦП Browser plug-in легко встраивается и применим в любом из современных браузеров с поддержкой сценариев JavaScript:

Поддерживаемые операционные системы:

КриптоПро ЭЦП Browser plug-in позволяет подписывать различные типы данных:

С точки зрения бизнес-функций, плагин позволяет использовать ЭП:

Например: В онлайн-банке подтверждение операции по переводу средств усовершенствованной электронной цифровой подписью обеспечит гарантию того, что счетом распорядился владелец в конкретный (подтвержденный) момент времени и сертификат ключа подписи на момент совершения транзакции был действителен.

КриптоПро ЭЦП Browser plug-in позволяет создавать и проверять как обычную электронную подпись, так и усовершенствованную электронную подпись. Поскольку плагин является частью стандарта применения усовершенствованной электронной цифровой подписи, автоматически решаются задачи:

Создание и проверка подписи происходят на стороне пользователя. При создании подписи с помощью КриптоПро ЭЦП Browser plug-in, электронная подпись может быть либо добавлена к подписываемым данным (присоединенная ЭП), либо создана отдельно (отделенная ЭП).

КриптоПро ЭЦП Browser plug-in распространяется бесплатно (лицензионное соглашение).

Возможные ошибки

Если при работе на ЭТП появляется одно из окон с ошибкой:

«Ошибка! Библиотека CAPICOM не может быть загружена, возможно, из-за низких прав доступа на данной локальной машине».

«Не установлен объект CAPICOM»

«На вашем компьютере отсутствуют или некорректно настроены средства для работы с ЭЦП. Обратитесь к поставщику вашего сертификата и СКЗИ».

«Невозможно создание объекта  сервером программирования объектов.»

«В Вашем браузере отсутствуют разрешения на использование ActiveX объектов.»

то необходимо выполнить действия, описанные ниже.

Как настроить internet explorer

1. Убедитесь, что вы используете именно Internet Explorer. Если ваша версия Internet Explorer ниже, чем 10, то необходимо запускать 32-битную версию (для этого откройте папку C:Program Files (x86)Internet Explorer и запустите файл iexplore.exe).

Если у вас операционная система Windows 10, убедитесь, что открываете не браузер Microsoft Edge, иконка которого очень похожа на Internet Explorer.

2. Необходимо добавить адреса ЭТП в Надежные узлы.

3. Для зоны «Надежные узлы» разрешить использование элементов Active-X.

  • в Internet Explorer «Сервис» — «Свойства обозревателя»; перейти на вкладку «Безопасность»; выделить «Надежные узлы»; нажать кнопку «Другой…»;
  • в разделе «Элементы Active-X и модули подключения» у всех параметров отметить «Включить».

Как установить сертификат подписи через криптопро csp —

Часто к нам обращаются с вопросом, как установить сертификат через КриптоПpo CSP. Ситуации бывают разные: сменился директор или главбух, получили новый сертификат в удостоверяющем центре и т.п. Раньше все работало, а теперь нет. Рассказываем, что нужно делать, чтобы установить личный цифровой сертификат на компьютер.

Вы можете установить личный сертификат двумя способами:

1. Через меню КриптоПро CSP «Просмотреть сертификаты в контейнере»

2. Через меню КриптоПро CSP «Установить личный сертификат»

Если на рабочем месте используется операционная система Windows 7 без SP1, то устанавливать сертификат следует по рекомендациям варианта № 2.

Вариант № 1. Устанавливаем через меню «Просмотреть сертификаты в контейнере»

Чтобы установить сертификат:

1. Выберите Пуск -> Панель управления -> КриптоПро CSP -> вкладка Сервис и нажмите кнопку “Просмотреть сертификаты в контейнере”.

Image 1.jpg

2. В открывшемся окне нажмите на кнопку “Обзор”. Выберите контейнер и подтвердите свой выбор кнопкой ОК.

Image 2.jpg

3. В следующем окне нажмите “Далее”.

Если появится сообщение “В контейнере закрытого ключа отсутствует открытый ключ шифрования”, перейдите к установке цифрового сертификата по варианту № 2.

4. Если на вашем компьютере установлена версия “КриптоПро CSP” 3.6 R2 (версия продукта 3.6.6497) или выше, то в открывшемся окне нажмите на кнопку “Установить”. После этого согласитесь с предложением заменить сертификат.

Читайте также:  Подписание документов PDF в Adobe Acrobat Reader.

Если кнопка “Установить” отсутствует, в окне “Сертификат для просмотра” нажмите кнопку “Свойства”.

Image 5.jpg

5. В окне “Сертификат” — > вкладка “Общие” нажмите на кнопку “Установить сертификат”.

Image 6.jpg

6. В окне “Мастер импорта сертификатов” выберите “Далее”.

7. Если у вас уставлена версия “КриптоПро CSP” 3.6, то в следующем окне достаточно оставить переключатель на пункте “Автоматически выбрать хранилище на основе типа сертификата” и нажать “Далее”. Сертификат будет автоматически установлен в хранилище “Личные”.

Image 7.jpg

8. В следующем окне нажмите “Далее”, затем “Готово” и дождитесь сообщения об успешной установке сертификата: “Импорт успешно выполнен”.

Image 8.jpg

Вариант 2. Устанавливаем через меню «Установить личный сертификат»

Для установки вам понадобится, собственно, сам файл сертификата (с расширением .cer). Он может находиться, например, на дискете, на токене или на жестком диске компьютера.

Чтобы установить сертификат:

1. Выберите Пуск -> Панель управления -> КриптоПро CSP -> вкладка Сервис и нажмите кнопку “Установить личный сертификат”.

Image 3.jpg

2. В окне “Мастер установки личного сертификата” нажмите на кнопку “Далее”. В следующем окне, чтобы выбрать файл сертификата, нажмите “Обзор”.

Image 4.jpg

3. Укажите путь к сертификату и нажмите на кнопку “Открыть”, затем “Далее”.

Image 10.jpg

4. В следующем окне вы можете просмотреть информацию о сертификате. Нажмите “Далее”.

Image 11.jpg

5. На следующем шаге введите или укажите контейнер закрытого ключа, который соответствует выбранному сертификату. Для этого воспользуйтесь кнопкой “Обзор”.

Image 12.jpg

6.  Выбрав контейнер, нажмите “Далее”.

Image 13.jpg

7. Дальше вам необходимо выбрать хранилище, куда будет установлен сертификат. Для этого в окне “Выбор хранилища сертификатов” нажмите на кнопку “Обзор”.

Если у вас установлена версия КриптоПро CSP 3.6 R2 (версия продукта 3.6.6497) или выше, поставьте флаг “Установить сертификат в контейнер”.

Image 14.jpg

8. Выберите хранилище “Личные” и нажмите ОК.

Image 15.jpg

9. Хранилище вы выбрали. Теперь нажмите “Далее”, затем — “Готово”. После этого может появиться сообщение:

Image 16.jpg

В этом случае нажмите “Да”.

10.  Дождитесь сообщения об успешной установке личного сертификата на компьютер.

Все, можно подписывать документы, используя новый сертификат.

Настройка криптопро эцп browser plug-in

{«SITE_HEADER_HELP_LNK»:»u041fu043eu043cu043eu0449u044c u0443u0447u0430u0441u0442u043du0438u043au0430u043c»,»SITE_HEADER_FAQ_LNK»:»u0412u043eu043fu0440u043eu0441-u043eu0442u0432u0435u0442″,»SITE_HEADER_PHONE_TXT»:»u041fu043e u0440u0430u0431u043eu0442u0435 u043du0430 u043fu043bu043eu0449u0430u0434u043au0435:»,»SITE_HEADER_LOGIN»:»u0412u0445u043eu0434 u0432 u043au0430u0431u0438u043du0435u0442″,»SITE_HEADER_LOGOUT»:»u0412u044bu0439u0442u0438″,»SITE_HEADER_REGISTRATION»:»u0420u0435u0433u0438u0441u0442u0440u0430u0446u0438u044f»,»MODALLER_CONFIRM»:»u0414u0430″,»MODALLER_DECLINE»:»u041eu0442u043cu0435u043du0430″}

Отсутствие сертификата подписчика в подписанном сообщении

CAPICOM в первую очередь ориентирован на работу с сертификатами и всем, что с ними связано (хранилища, списки отзыва), а не с ключами или ключевыми контейнерами. Поэтому и класс CAPICOM.SignedData спроектирован и функционирует так, что сертификат подписчика всегда ищется в подписанном сообщении.

При его отсутствии выдается соответствующая ошибка «The signer is not found in the signed message (0x80880251)». Никак обойти это ограничение нельзя – SignedData не принимает в качестве параметров сертификат (а тем более коллекцию сертификатов или хранилище), который нужно использовать для проверки.

Подпись текста в ansi кодировке

Строковые параметры методов COM объектов, работающих через IDispatch, являются, по сути своей, юникодными строками – на каждый символ строки приходится 2 байта памяти. Поэтому, при передаче параметры явно или неявно преобразовываются к такому виду. Если в системе только одна сторона использует CAPICOM а вторая использует, например, CryptoAPI – то может возникнуть проблема несовпадения исходного документа для подписи и проверки.

Пример – одна сторона подписывает файл размером 3 байта, содержащий строку «123», с помощью ПО, написанного на Visual Basic 6 с использованием CAPICOM и отправляет его для проверки с неприсоединенной подписью. Вторая сторона для проверки использует ПО, написанное на C с использованием CryptoAPI (например, утилиту коммандной строки) и при проверке подписи получает ошибку NTE_BAD_SIGNATURE (0x80090006), хотя исходный документ не менялся.

Читайте также:  Шифрование в MySQL: хранилище ключей / Блог компании OTUS. Онлайн-образование / Хабр

Причина ошибки в том, что в VB при чтении файла а затем при передаче параметров строка «123» была преобразована к юникоду, т.е. реально было подписано 6 байт «00 31 00 32 00 33», а проверено – 3 «31 32 33». Локализовать эту проблему можно, создав присоединенную подпись и проверив ее с помощью утилиты csptest (входит в состав КриптоПро CSP) – csptest –sfsign –verify –in <файл с подписанным сообщением> -out data.txt –base64 и затем сравнив содержимое полученного файла data.txt с исходным документом.

Решение этой проблемы – при необходимости в языках, которые делают неявное преобразование (как VB, .NET) всегда преобразовывать подписываемый и проверяемый текст к ANSI, если в системе строго не оговорено обратное. В VB для этого можно использовать функцию StrConv или написать свою для побайтного преобразования с использованием метода ByteArrayToBinaryString класса Utilities библиотеки CAPICOM. В .

NET подобное преобразование сделать сложнее, и для этого не подойдёт метод ByteArrayToBinaryString, поскольку возвращаемое этим методом значение будет преобразовано в .NET-тип System.String, заточенный под юникодные строки. Ошибка преобразования возникнет, если в исходном массиве содержится нечётное число байт.

Возможным решением проблемы является написание специального маршалера для передачи таких строк из .NET в CAPICOM и обратно. Пример интероп-ассембли для CAPICOM, в которой реализован такой маршалер, а в интерфейсе методов, подверженных описанной ошибке преобразования, тип System.

Системные требования

  • Установка плагина возможна на следующих операционных системах:  Win XP SP3, Win Vista SP2, Win 2003 SP2, Win 2008 SP2, Win 7, Win 2008 R2, Win 8, Win8.1, Win10.
  • Работает с браузерами: IE 8 — 11, Opera, Mozilla Firefox, Google Chrome, Yandex Browser

           Не работает в браузере EDGE, предустановленном по умолчанию в Windows 10.

  • Требуется предустановленная КриптоПро CSP версии не ниже 3.6 R2

Электронная цифровая подпись на сайте при помощи криптопро эцп browser plug-in / песочница / хабр

В данной статье рассмотрим использование электронно-цифровой подписи на сайте.

Что необходимо, чтобы человек смог использовать электронно-цифровую подпись на сайте?

1) СКЗИ (средство криптографической защиты информации)
Мой опыт работы показывает, что порядка 90% использует КриптоПро CSP (скачать), который в явном или неявном виде продвигают удостоверяющие центры. Порядка 10% VipNet CSP (), который можно использовать бесплатно. С остальными СКЗИ на практике не встречался.
2) КриптоПро ЭЦП Browser plug-in (страница плагина).
3) Установленная подпись (хотя бы одна).

Проверка возможности осуществления подписи
javascript ( jquery)

1) Попытка создать объект cades.
Нужно сделать примечание, что тут и далее, будет деление на браузер с ActiveX(читай IE) и остальные.
Проверка будет осуществляться:

return ('ActiveXObject' in window);

для ActiveX:

try {
    store = new ActiveXObject('CAdESCOM.store');
    status = true;
} catch (e) {
    status = false;
}

Для остальных:

if (navigator.mimeTypes['application/x-cades']) {
    status = true;
} else {
    status = false;
}

Если проверка прошла неудачно, то уведомляем об этом пользователя.

Стоит иметь ввиду, что после обновления хрома до версии 42 (спасибо

статье

за информацию) нужно включить:

chrome://flags/#enable-npapi

Следующая проверка — а разрешен ли плагин для запуска (не для IE проверка)?

try {
    store = objSign.CreateObject('CAPICOM.store');
    status = true;
} catch (e) {
    status = false;
}

Где objSign:

objSign = $('<object/>', {
    'id': 'cadesplugin',
    'type': 'application/x-cades',
    'css': {
        'visibility': 'hidden',
        'height': '0px',
        'width': '0px',
        'position': 'absolute'
    }
}).appendTo('body').get(0);

Проверяем на СКЗИ путем попытки открыть хранилище.

try {
    store.Open();
    status = true;
} catch (e) {
    status = false;
}

Проверяем на существование сертификатов в хранилище:

if ('Certificates' in store) {
    certs = store.Certificates;
}

И их количество (бывает, что Certificates есть, но пуст, что нам тоже не подойдет):

if (certs.Count) {
    status = true;
} else {
    status = false;
}

Первый шаг сделали — проверили возможность подписания чего-либо.

Читайте также:  КриптоПро | КриптоПро ЭЦП SDK

Выбор электронной цифровой подписи

У клиента может быть установлено несколько сертификатов. Сертификаты могут быть от разных удостоверяющих центров (УЦ), выданными быть разным людям, с разными датами выдачами, поэтому надо предоставить выбор, каким именно он хочется воспользоваться.

1) Группируем по удостоверяющим центрам
Информация об удостоверяющем центре хранится в сертификате.

certs.Item(i).GetInfo(1)
где certs — сертификаты из хранилища, см выше
i — порядковый номер сертификата от 1 (обратите внимание) до certs.Count.
Обратите внимание, что, в случае «кривых» сертификатов, вернуться может и undefined, имеет смысл сделать один дефолтный УЦ для таких случаев.

Теперь мы знаем список УЦ, услугами которых воспользовался клиент.
Запоминаем их и выведем через optgroup.
Сам text у option будет таким:

cert.GetInfo(6)   ' ('   formatDate(cert.ValidFromDate)   ' - '   formatDate(cert.ValidToDate)   ')'

в

cert.GetInfo(6)

— кому выдан сертификат

в

ValidFromDate

— с какого срока сертификат начал/начнет действие

в

ValidToDate

— соответственно, до какого срока

Ну и форматирование даты стандартное:

function formatDate(d) {
    try {
        d = new Date(d);
        return ('0'   d.getDate()).slice(-2)   '.'   ('0'   (d.getMonth()   1)).slice(-2)   '.'   d.getFullYear();
    } catch (e) {
        return '';
    }
}

Еще можно подсветить option.

Зеленым — для работоспособных сертификатов, красным — нет.

Информацию можно получить при помощи самого сертификата.

try {
    return cert.IsValid().Result;
} catch (e) {
    return false;
}

Стоит отметить, что сама по себе данная проверка имеет малую ценность, ибо все причины не может отсечь.

Но самые базовые, например, проверка даты — проверяет.

В value у option запишем отпечаток cert.Thumbprint.
Можно порядковый номер записать, можно другие данные — на ваше усмотрение.

Подписание
Ну и, собственно, самый главный шаг, к которому мы стремились — подписание.

1) Находим выбранный сертификат.
Для нашего примера:

certs.Find(0, thumbprint).Item(1)

— означает, что мы ищем по отпечатку

1

— что используем первый результат выборки (по факту единственный)

2) Подписываем:

if (isActiveX()) {
    var CPSigner = new ActiveXObject('CAdESCOM.CPSigner');
} else {
    var CPSigner = objSign.CreateObject('CAdESCOM.CPSigner');
}
CPSigner.Certificate = cert;
if (isActiveX()) {
    var SignedData = new ActiveXObject('CAdESCOM.CadesSignedData');
} else {
    var SignedData = objSign.CreateObject('CAdESCOM.CadesSignedData');
}
SignedData.Content = text;
return SignedData.SignCades(CPSigner, 1, false);

где cert — сертификат, при помощи которого подписываем
text — собственно, что подписываем
Ну а в return возвращается подписанное сообщение.

p.s. По максимуму код постарался вычистить от специфики проекта. Если кому-то этот материал пригодится и будет интересно — напишу и серверную часть. Проверка подписанного сообщения (с цепочкой и без), проверка сертификата (ocsp и без), использования tsp и т.д.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector