Цитата:Вариант 1.
Участники кейса: Пользователь системы, Front-end (FE) и Back-end (BE)
1. Пользователь вызвал функцию “Подписать ЭЦП“
2.FE отправил вызвал плагин КриптоПро
3. Браузер запросил у пользователя разрешения на использование браузерного плагина - разрешено
4. Плагин КриптоПро запросил подтверждение ключа
5. Пользователь с флэшки или из закрытого контейнера крипто про CSP выбрал свой ключ
6. Плагин КриптоПро проверил ключ (все ок) и создал подпись
7. Плагин КриптоПро отправил сообщение об успехе на FE
8. FE отправляет на BE данные о подписанте с id документа и данными ЭП
9. BE записывает данные в БД
10. BE отправляет на фронт сообщение об успешной записи данных
11. FE отображает пользователю сообщение об успешной подписи протокола “Протокол успешно подписан“
1 я понимаю как "нажал кнопку"? тогда да.
3. замечу что в современных браузерах не плагин, а расширение, что добавляет еще один слой.
4. Расширение обратилось к плагину и проверило, что адрес страницы в перечне доверенных.
Если нет, то запрашивает у пользователя разрешение на считывание списка сертификатов. Пользователь ответил нет - выдается ошибка. Пользователь ответил да - расширение обращается к плагину. плагин обращается к CryptoApi. CryptoApi перечисляет сертификаты в хранилище и некоторые дополнительные свойства (имеет ли сертификат ключ, например).
CryptoApi возвращает результат плагину.
В зависимости от плагина также может проверяться подключен ли токен/флешка - для этого также вызывается CryptoApi. CryptoApi вызывает криптопровайдер определенного типа (например, крипто про CSP) и перечисляет доступные контейнеры. CryptoApi возвращает результат плагину.
плагин формирует итоговый список сертификатов и возвращает расширению.
FE получает список сертификатов от хранилища и видит свойства (например, имеет ли сертификат ключ). При необходимости не имеющие ключа исключаются.
5. FE отображает список сертификатов пользователю.
Пользователь выбирает сертификат.
FE обращается к расширению с передачей объекта сертификата, данных документа, пвраметров, вызывая функцию подписания.
Расширение переадресует это плагину.
Плагин переадресует это CryptoApi.
CryptoApi при необходимости делает пред обработку данных для сложных форматов подписи.
CryptoApi переадресует криптопровайдеру, связанному с сертификатом (крипто про CSP).
Криптопровайдер по ссылке, связанной с сертификатом в хранилище ищет контейнер.
Если контейнер не вставлен - выводит запрос пользователю в интерфейсе криптопровайдера.
Если контейнер имеет пин-код и он не запомнен - выводит запрос пользователю в интерфейса криптопровайдера.
6. Если все ок - выполняется вычисление хэша данных, хэш подписывается ключом из контейнера.
7. Результат возвращается криптопровайдером в CryptoApi.
CryptoApi при необходимости собирает более сложный формат подписи.
CryptoApi возвращает плагину.
плагин возвращает расширению.
расширение возвращает FE.
Как-то так. В теории если сертификат связан с другим криптопровайдером, то вместо крипто про CSP будет что-то другое. Однако сам по себе плагин (и расширение) не может вычислить криптографические функции.
Насчет варианта 2 немного не понял - pycades это просто другой интерфейс того же плагина, больше подходит для BE. Если будете проверять подпись перед сохранением в БД, то там тоже понадобится плагин и криптопровайдер. Правда для проверки допускается использование без лицензии. Если же мысль в том что ключи хранятся на сервере и подписывает BE, то нужна лицензия (серверная, ага)
точно нет. В целом почти все остается как расписано выше, разве что визуализация документа и выбор сертификата ложатся на связку FE-BE. Кроме того, пользователи должны как-то аутентифицироваться.
Цитата:сертификат необходимо проверять. а если ключ скомпроментирован? злоумышленник украл эп заявителя, подписал документ: "отдать полцарства"
Это можно несколько ослабить если документ формируется самой ИС, но в целом верно.
Цитата:без доступа к интернету будет проблематично
Да, то есть в локальной сети должны размещаться "кэшированные" списки отзыва и должно быть настроена их выдача при обращении по оригинальному адресу их публикации. В простейшем случае - замена DNS на локальный IP по которому они лежат.