Суть проблемы и что с ней будет завтра
Проблема довольно тривиальна: хотите реализовать ЭЦП на клиенте в браузере, думаете использовать для этого свой любимый javascript? Ничего не выйдет, и все потому, что браузеры просто не предоставляют API для работы с сертификатами, токенами, подписью и тд. и тп… Как должен выглядить этот механизм в мечтах любого веб-разработчика? Наверное как-то так:
//получить список сертификатов пользователя
window.crypto.getCertificates(options);
//подписать какую-то строку
window.crypto.signText(text, options);
ну и так далее...
Да, а еще было бы здорово, чтобы все это поддерживало отечественные ГОСТы… ну, это я уж совсем размечтался. К сожалению, ничего подобного в современных браузерах вы не найдете. Есть, конечно, робкие попытки реализовать что-то похожее у Mozilla, но предупреждение в заголовке статьи весьма печалит:
Кстати, если кто-то пытался использовать этот API, отпишитесь, весьма интересно.Также есть упоминание Crypto в репозитории W3C. Скорее всего работа там началась совсем не так давно, материала там сейчас немного, но последнее обновление было недавно, так что работа идет:
Будет ли все это доведено до ума, а самое главное, когда это случится, сегодня вам, наверное, никто не скажет. Так что же остается делать разработчикам, которым надо здесь и сейчас?
Activex
Используется в 99% случаев, когда необходимо реализовать ЭЦП в браузере, не стесняются его использовать банки, торговые площадки и прочие серьезные организации. На мой взгляд, сейчас это худший из вариантов, почему?
Вы привыкли использовать для работы свой любимый FF или Chrome? — Забудьте! ActiveX работает только в IE.
Не любите копаться в настройках браузера? — А придется! Перед тем как все заработает, вам изрядно придется покопаться в настройках безопасности вашего IE.
А может быть вы такой продвинутый, что у вас стоит Win7, да еще и x64, а может вы еще и IE9-10 себе поставили? — Очень зря, скорее всего у вас ничего не получится.
Шутки шутками, а ведь Microsoft объявила, что поддержка CAPICOM прекращена и далее компонент разрабатываться не будет и последняя версия CAPICOM, которая официально поддерживается, была в Windows Vista.
Java applet
Все вроде бы не так уж плохо, и код написан один раз, и работает во всех браузерах, и даже настраивать ничего не надо. Но если у вас не установлена JRE, ничего не будет. Чаще всего работает в связке с
, хотя, используя JNI, можно много чего прикрутить. Да, чтобы все работало, сам апплет должен быть подписан.
Костыли
Хочу сразу оговориться, ЭЦП в браузере — это, пожалуй, один из немногих случаев когда разработчик просто вынужден использовать различные ухищрения и костыли, я перечислю наиболее популярные из них:
Давайте рассмотрим недостатки каждого из них, достоинства описывать не буду, имхо, у всех костылей оно одно — “ну, оно же работает”.
Личный опыт
Да, мне тоже “повезло” заниматься реализацией ЭЦП в браузере. Сам работаю в одной из минских компаний, занимающейся разработкой ПО, и однажды потребовалось срочно реализовать поддержку ЭЦП в браузере в одной из систем. Скажу честно, сначала хотел поступить как и 99% в такой ситуации и задействовать ActiveX.
Но, постепенно погружаясь в проблему, стал осознавать, что это обернется сначала головной болью для пользователей, а затем и для меня как разработчика. Писать плагины под каждый браузер не было времени. Оставалось два решения: java апплет и туннель.
Дело в том, что в Беларуси как и в России принят свой ГОСТ на процедуры выработки и проверки электронной цифровой подписи, только у нас он называется СТБ РБ 1176.2–99 и никаких вам RSA. Даешь свой ГОСТ каждой стране! И если для российского ГОСТа есть практические реализации каждого из вышеперечисленных способов, можно выбирать любой, то белорусским разработчикам повезло куда меньше.
По этому поводу даже лично беседовал c представителями компании, выпускающей криптографическое ПО для нашей страны. Разговор оставил двоякое впечатление. Народ вполне адекватный, проблему понимают, но говорят, что это не их задача, они, мол, написали криптопровайдер, удовлетворяющий всем ГОСТам и прошедший государственную экспертизу, а как вы его собираетесь использовать, это не их проблема.
— Можем лишь предложить вам использовать ActiveX.— Ну, а как же, проблемы связанные с ним? — У нас, конечно, есть определенные наработки с использованием java апплетов, но в качестве продукта мы вам их пока предложить не можем. Разработка такого рода ПО — не наша задача.
На мой взгляд, это не совсем верная позиция, ведь предлагая продукт, коммерчески выгодно предложить и окружение к нему.
Ну да ладно, работаем с тем, что есть. А что у нас есть? Ранее в нашей компании уже было написано desktop-ое приложение, использующее функции ЭЦП, и там имелся компонент, работающий непосредственно с CryptoAPI, написан он был на delphi. Очень уж хотелось как-то использовать этот опыт коллег и самому не тратить на это время, а самое главное сделать это быстро. Но как это сделать? Соединить компонент на delphi и веб-приложение? Ответ на схеме:
Кратко поясню, что происходит. Когда нам нужно что-то подписать, мы с помощью javascript вызываем функцию java апплета:
document.CryptoAPI.sign(text);
Апплет в свою очередь через сокеты связывается с desktop-приложением, передает ему необходимые параметры, приложение подписывает то, что мы запросили (для этого как раз используется ранее написанный компонент коллег), и передает подписанные данные апплету, а тот в свою очередь браузеру, вызывая функцию:
function signResult(params) {
//что-то делаем с подписанными данными
}
Настройка браузера для эцп, плагины настройки браузеров для работы с эцп
При работе на онлайн площадках и в госсистемах, требуется настроить браузер для ЭЦП, позволяющий работать в соответствии с политикой безопасности операционной системы (ОС). Для того, чтобы установить связь между ним и СКЗИ, на компьютер загружается плагин, формирующий ЭЦП в веб-обозревателе. Компонента, взаимодействуя со СКЗИ, расширяет возможности работы в он-лайне.
Настройка браузера для работы с ЭЦП позволяет создавать электронную подпись (ЭП), расшифровывать файлы, проводить операции с модулем КриптоПро. Подпись создается на стороне владельца. Отсутствие настроек не позволяет создавать подпись, т.к. ОС блокирует использование личных данных владельца подписи в браузере.
ПК с инсталлированным Browser plug-in дает возможность работать на ЭТП, а также на корпоративных и клиентских сайтах, в ГИС и электронных офисах. Плагин является дополнением для СКЗИ, делая возможным реализацию всей полноты функций КЭП при работе в Интернете. Специалисты ГК «Интегрус» предлагают настройку браузеров всех типов для работы с ЭЦП, в т.ч. на сайтах госзакупок.
С начала 2021 г. квалифицированная ЭП формируется исходя из нового стандарта (ГОСТ Р 34.10-2021). Бесплатные плагины v.1.5/2.0. Browser plug-in 2.0 сочетаются с КриптоПро версий 4.0 и выше. Сертификаты, выпущенные по устаревшему стандарту, действительны до окончания срока действия.
Создание рабочего места подразумевает установку криптопровайдера, драйверов токена, загрузку сертификатов и настройку браузера. Плагин 2.0 совместим с ОС Windows, Linux, macOS и распространенными браузерами (IE, Яндекс, Firefox, Опера, Google Chrome, Сафари).
После загрузки, установки компонента требуется перезагрузка ПК с последующей настройкой веб-обозревателя. По умолчанию процесс настройки браузера под использование ЭЦП касается только криптопровайдера КриптоПро и ключей Рутокена и JaCarta. Иные криптопровайдеры имеют другие настройки и могут повредить ОС в момент некорректной установки. В процесс установки необходимо отключать антивирус или осуществлять выход для Касперского.
На сайте госзакупок действует шифрование по ГОСТу, поэтому рекомендована установка IE версии 6.0 и выше. Обойти это препятствие можно, установив браузер, распознающий данный тип шифрования – Яндекс, Хромиум. Также настроить госзакупки на Опере можно начиная от версии 9.0 и выше, для Firefox – используя браузеры от 2.0.0 и выше.
В браузере Internet Explorer для работы с ЭЦП не требуется ничего, модуль устанавливается автоматически.
Яндекс.Браузер для работы с ЭЦП требует установки криптографических компонентов и плагина системы электронного правительства. Актуальная версия плагина 4.0 инсталлируется на ПК в строгом соответствии с рекомендациями Мастера установки. Рекомендуется отключать установку дополнительных программ, мешающих работе с ЭП (менеджера браузеров, элементов Яндекс для IE и т.п.)
Настройка Мозилы для ЭЦП различается по версии браузера – от устаревшей до 52 и выше. Для Firefox следует использовать более новую, 52 версию. За счет утилиты браузер может оперировать личными данными на надежных ресурсах. После загрузки необходимо проверить правильность ее инсталляции в разделе «Дополнения» веб-обозревателя. Настройка Mozilla Firefox для госзакупок требует осторожности, т.к. изменение настроек способно снизить безопасность и ухудшить работу приложения.
Настройка Google Chrome для работы с ЭЦП требует обновления браузера до самой современной версии. Загружая КриптоПро ЭЦП браузер плагин следует подтвердить изменение персональной информации на доверенных сайтах, разрешив соединение с надежными приложениями. Если загрузка плагина не началось автоматически, надо вручную запустить модуль CryptoPro CAdES Browser Plug-in. Плагин браузера для Хрома КриптоПро ЭЦП подходит для всех обозревателей, созданных на базе Chromium, в т.ч. для Яндекса и Оперы.
Плагины к браузерам
Если чего-то нет в браузере, но оно вам очень нужно, выход есть — напишите свой плагин. Основная проблема здесь в том, что если вы хотите, чтобы это работало во всех браузерах, вам придется написать плагин под каждый из них. Есть еще проблема с поддержкой — никто не гарантирует, что ваш плагин будет работать в новой версией браузера (или старой), вспомните ситуацию с FF, когда Mozilla перешла на ускоренный выпуск версий. Ну и еще проблема с тем, что вам этот плагин как минимум придется поставить. Подробнее об этом решении можно найти
Системные требования
- Установка плагина возможна на следующих операционных системах: 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
Туннель
Относительно новый способ, работает по принципу прокси, основная идея в том, что особым образом сформированный POST-запрос при отправке на сервер проходит через туннель, тот подписывает данные из этого запроса, подставляет подписанные данные в поле запроса вместо данных и все отправляется дальше на сервер и туда уже приходят данные с ЭЦП. Принцип довольно простой, но эффективный. У этого способа имеется
. Подробнее можно почитать
. Чтобы все это работало, на клиенте собственно должен быть установлен этот туннель, хотя можно запустить и с флешки.
Как видите, решения есть, хотя каждое из них имеет определенные ограничения и оговорки, я намеренно не касался таких проблем как работа в различных операционных системах, поддержка ГОСТов, работа на мобильных платформах — здесь проблем еще больше, а ведь это тоже очень важно.