Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline alexf25  
#1 Оставлено : 15 июня 2018 г. 11:24:06(UTC)
alexf25

Статус: Участник

Группы: Участники
Зарегистрирован: 05.06.2018(UTC)
Сообщений: 12
Российская Федерация
Откуда: Moscow

Все привет!

Возникла такая проблема: в нашем приложении документ должен подписываться несколькими назначенными сотрудниками, но в разное время. Смысл в том, что у каждого свой сертификат и приватные ключи не должны передаваться на сервер. Каждый сотрудник хранит свой сертификат на флэшке и должен иметь возможность добавить свою подпись исключительно на клиенте, используя плагин Crypto PRO для Хрома. Подписи должны быть собраны в общем Sig-файле.

Как подписывать файл сертификатом, который установлен в хранилище User/My (под Виндой), разобрались. Нужно сначала получить список валидных сертификатов, имеющих приватный ключ, отобразить и дать пользователю выбрать один из них, затем найти сам сертификат в хранилище My по Subject, загрузить, и применить в алгоритме подписи. А вот как работать с сертификатом на флэшке, если юзер не хочет его ставить? По идее, они могут не хотеть из-за секьюрности, чтобы к сертификату никто не имел доступ.

Для поиска сертификата во Subject в хранилище и его загрузки используем:

Код:

const loadCertificate = (certSubjectName: string, stgType: number, stgName: string): Promise<any> => {
    return new Promise((resolve, reject) => {
        cadesplugin.async_spawn(function* it(args) {
            try {
                const oStore: ICertStore = yield cadesplugin.CreateObjectAsync('CAPICOM.Store');
                yield oStore.Open(stgType, stgName, cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

                const oCertificates: ICertCollection = yield oStore.Certificates;
                const oCerts = yield oCertificates.Find(
                    cadesplugin.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName, true);
                const count = yield oCerts.Count;

                if (count === 0) {
                    reject({message: `Сертификат '${certSubjectName}' не найден`});
                    return;
                }

                const oCertificate = yield oCerts.Item(1);
                yield oStore.Close();

                resolve(oCertificate);
            } catch (err) {
                reject(err);
            }
        });
    });
};


С уважением,
Алексей

Отредактировано пользователем 15 июня 2018 г. 11:24:58(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#2 Оставлено : 15 июня 2018 г. 11:40:07(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Здравствуйте.

Сертификат установить в хранилище Личное
На контейнере должен быть пароль, пароль не сохранять.
Контейнер на внешнем устройстве.

>По идее, они могут не хотеть из-за секьюрности, чтобы к сертификату никто не имел доступ.

Сертификат используется для получения информации о контейнере (чтобы в итоге получить доступ к закрытому ключу)
+ сертификат добавляется в CMS.



> Подписи должны быть собраны в общем Sig-файле.

Возможно будет полезным:
Приказ Судебного департамента при Верховном Суде РФ от 28 декабря 2016 г. № 252 “Об утверждении Порядка подачи в арбитражные суды Российской Федерации документов в электронном виде, в том числе в форме электронного документа”

http://www.garant.ru/pro.../ipo/prime/doc/71478932/

Цитата:
2.3.5.
...
Электронная подпись должна содержаться в отдельном файле (отсоединенная электронная подпись).

При подписании документа несколькими лицами каждая электронная подпись должна содержаться в отдельном файле.
...
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#3 Оставлено : 15 июня 2018 г. 11:41:55(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Цитата:

>По идее, они могут не хотеть из-за секьюрности, чтобы к сертификату никто не имел доступ.



Остановит лишь ПО, которое работает с сертификатами.
ПО, которое работает напрямую с контейнерами - сможет запросить доступ.
Как и ПО, которое просто может сделать "теневую копию" с флешки.
Техническую поддержку оказываем тут
Наша база знаний
Offline alexf25  
#4 Оставлено : 15 июня 2018 г. 12:06:20(UTC)
alexf25

Статус: Участник

Группы: Участники
Зарегистрирован: 05.06.2018(UTC)
Сообщений: 12
Российская Федерация
Откуда: Moscow

Спасибо, Андрей!
А вот CAdESCOM.CadesSignedData: VerifyHash, CoSignHash, SignHash - они позволяют передать на этот случай пароль?
Offline Андрей Писарев  
#5 Оставлено : 15 июня 2018 г. 12:33:24(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Если пароль установлен и не был сохранен - будет диалог от криптопровайдера.

Либо программно установить KeyPin
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.