Большое спасибо, Михаил, все сделали оперативно а главное понятно для меня... Так как мы с вами нашли общий язык. хотелось бы в дальнейшем так же продолжить связь именно с вами. Надеюсь на плодотворное сотрудничество.
Олеся Михайловна - генеральный директор ООО "ВКС"
От имени предприятия ГУП "Севастопольское авиационное предприятие" выражаем благодарность за профессионализм и оперативность вашей компании! Желаем вашей компании дальнейшего процветания!
Гуськова Лилия Ивановна - менеджер. ГУП "САП"
Спасибо вам, Михаил, большое за помощь в оформлении. Очень квалифицированный сотрудник +5!
Надия Шамильевна - предприниматель ИП Аношкина
От лица компании "АКБ-Авто" и от себя лично выражаю Вам и всем сотрудникам вашей компании благодарность за продуктивную и качественную работу, чуткое отношение к требованиям клиента и оперативность в исполнении заказываемых работ.
Насибуллина Альфира - Старший менеджер "АКБ-Авто"
Хочу поблагодарить консультанта Михаила за отличную работу, своевременные и полные консультации. Очень внимателен к проблемам клиента и вопросам, оперативное решение самых казалось бы для меня сложных ситуаций. Очень приятно работать с Михаилом!!! Теперь своим клиентам и знакомым буду рекомендовать Вашу компанию. Да и консультанты в тех.поддержке тоже очень вежливы, внимательны, помогли справится со сложной установкой ключа. Спасибо!!!
Ольга Севостьянова.
Приобретение ключа оказалось очень лёгким и, даже, приятным. Огромная благодарность за содействие менеджеру Михаилу. Объясняет сложные и массивные для понимания вещи ёмко, но очень понятно. К тому же я позвонил на горячую бесплатную линию и в режиме он-лайн, вместе с Михаилом оставил заявку. Мне изготовили ключ через 2 рабочих дня. В общем, рекомендую если экономите своё время, но в тоже время хотите иметь понимание - что покупаете и за что платите. Спасибо.
Левицкий Александр Константинович г. Самара
Личная благодарность консультанту Михаилу Владимировичу за оперативную консультацию и работу по ускоренному получению сертификата ЭП. В ходе предварительной консультации подбирается оптимальный набор индивидуальных услуг. Конечный результат получен незамедлительно.
Стоянова Н.Л. - главный бухгалтер ООО "СИТЕКРИМ"
Спасибо за оперативную работу и компетентную помощь! Консультацией остался очень доволен!
Дмитрий Фомин
ООО "Эксперт Система" благодарит за оперативную работу консультанта Михаила! Желаем Вашей компании роста и процветания!
Суханова М.С. - Оценщик ООО "Эксперт Система", г. Волгоград
Спасибо консультанту, представившемуся Михаилом, за оперативность в работе с клиентами.
Пономарев Степан Геннадьевич
Большое спасибо консультанту Михаилу, за оказанную помощь в получении ЭЦП. За оперативную работу и консультирование по вопросам возникающим в процессе оформления.
Леонид Некрасов
Компания в лице консультанта Михаила делает невозможное! Ускорение аккредитации менее чем за 1 час! Оплата по факту оказания услуги. Думал, такого не бывает. С полной ответственностью могу советовать связываться с Центром выдачи электронных подписей.
Железный человек 2 мая 2015 в 09:46Электронная цифровая подпись на сайте при помощи КриптоПро ЭЦП 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 = $("", {
"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; }
Первый шаг сделали - проверили возможность подписания чего-либо.
Выбор электронной цифровой подписи
У клиента может быть установлено несколько сертификатов. Сертификаты могут быть от разных удостоверяющих центров (УЦ), выданными быть разным людям, с разными датами выдачами, поэтому надо предоставить выбор, каким именно он хочется воспользоваться.
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)
0 - означает, что мы ищем по отпечатку
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 и т.д.
Теги: criptopro, ЭЦП, openssl, cades, javascript
мастер слога 2 мая 2015 в 09:46Электронная цифровая подпись на сайте при помощи КриптоПро ЭЦП Browser plug-in
- JavaScript ,
- Разработка веб-сайтов ,
- Криптография
В данной статье рассмотрим использование электронно-цифровой подписи на сайте.
Что необходимо, чтобы человек смог использовать электронно-цифровую подпись на сайте?
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 = $("", {
"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; }
Первый шаг сделали - проверили возможность подписания чего-либо.
Выбор электронной цифровой подписи
У клиента может быть установлено несколько сертификатов. Сертификаты могут быть от разных удостоверяющих центров (УЦ), выданными быть разным людям, с разными датами выдачами, поэтому надо предоставить выбор, каким именно он хочется воспользоваться.
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)
0 - означает, что мы ищем по отпечатку
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 и т.д.
Теги: criptopro, ЭЦП, openssl, cades, javascript
КриптоПро ЭЦП browser plug-in (он же КриптоПро CADESCOM или Кадеском) - плагин, необходимый для создания и проверки электронной подписи на web-страницах с использованием КриптоПро CSP. Используется для работы на торговых площадках и порталах. Дистрибутив доступен на сайте КриптоПро в разделе Продукты / КриптоПро ЭЦП Browser plug-in http://www.cryptopro.ru/products/cades/plugin/get_2_0 .
Системные требования
- Установка плагина возможна на следующих операционных системах: 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
Особенности некоторых браузеров по настройке работы плагина
- в Mozilla Firefox 29 и выше: необходимо включить работу плагина (браузер может не запросить разрешения на включение плагина). Для этого пройти диагностику и выполнить фикс «Включение плагинов в Mozilla Firefox» , после чего обязательно перезапустить Firefox . Также это можно сделать вручную: нажать Ctrl+Shift+A, перейти в раздел «Плагины», выбрать CryptoPro CAdES NPAPI Browser Plug-in и перевести его в состояние «Всегда включать» (Always active), после чего обязательно перезапустить Firefox .
- в Google Chrome необходимо зайти по ссылке и установить расширение.
- В Yandex Browser и Opera нужно установить расширение, доступное по этой ссылке
- В Internet Explorer необходимо сделать следующие настройки:
- Добавить адрес сайта, на котором работаете с плагином, в надёжные узлы (Свойства браузера / безопасность / надёжные сайты / сайты / добавить адрес сайта).
- Если работа ведётся в Internet Explorer 11, то попробовать работу в режиме совместимости.
- Проверить, что адрес сайта добавлен в надёжные узлы плагина (большинство сайтов, принимающих сертификаты нашего УЦ, можно добавить автоматически с помощью диагностики https://help.kontur.ru/uc). Чтобы проверить, что сайт добавлен в надежные узлы плагина, нужно перейти в Пуск — Все программы — КРИПТО-ПРО - Настройки КриптоПро ЭЦП Browser plug-in. Откроется окно браузера, в котором нужно будет позволить разблокировать все содержимое страницы/разрешить доступ.