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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline iiigori  
#1 Оставлено : 7 февраля 2024 г. 16:35:39(UTC)
iiigori

Статус: Новичок

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

Сказал(а) «Спасибо»: 2 раз
Использую библиотеку на JS. Получаю список всех сертификатов. И если 5 сертификатов из 10 в списке были скопированы с устройства, то плагин показывает окно с просьбой вставить флешку. Нажимаешь отмену и так пять раз. Как выключить всплывающие окна с просьбой вставить флешку если сертификат был скопирован на устройство?
Offline Андрей *  
#2 Оставлено : 7 февраля 2024 г. 20:37:23(UTC)
Андрей *

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

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

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

А на странице тестирования плагина другое поведение?

Как перечисляете сертификаты?

Техническую поддержку оказываем тут
Наша база знаний
Offline iiigori  
#3 Оставлено : 8 февраля 2024 г. 10:42:51(UTC)
iiigori

Статус: Новичок

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

Сказал(а) «Спасибо»: 2 раз
Да другое поведение, там просто список отображается и все.

try {
const oStore = await cadescomMethods.oStore();
await oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

const certificates = await oStore.Certificates;

if (!certificates) {
throw new Error('Нет доступных сертификатов');
}

// const findCertificate = await certificates.Find(CAPICOM_CERTIFICATE_FIND_TIME_VALID);
const findCertsWithPrivateKey = await certificates.Find(
CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,
CAPICOM_PROPID_KEY_PROV_INFO,
);

const count = await findCertsWithPrivateKey.Count;

if (!count) {
throw new Error('Нет сертификатов с приватным ключём');
}

const createCertList = [];

for (let index = 0; index < count; index++) {
const certApi = await findCertsWithPrivateKey.Item(index + 1);

const issuerInfo = await certApi.IssuerName;
const privateKey = await certApi.PrivateKey;
const serialNumber = await certApi.SerialNumber;
const subjectInfo = await certApi.SubjectName;
const thumbprint = await certApi.Thumbprint;
const validFromDate = await certApi.ValidFromDate;
const validToDate = await certApi.ValidToDate;
const pubKey = await certApi.PublicKey();
const algorithm = await pubKey.Algorithm;
const keyAlgorithm = await algorithm.FriendlyName;
const hasPrivateKey = await certApi.HasPrivateKey();

let privateKeyLink = '';
if (hasPrivateKey) {
try {
privateKeyLink = await privateKey.UniqueContainerName;
} catch (e) {
privateKeyLink = e.message;
}
}

let status = '';
let isValid = false;
//если попадется сертификат с неизвестным алгоритмом
//тут будет исключение. В таком сертификате просто пропускаем такое поле
try {
const validator = await certApi.IsValid();
isValid = await validator.Result;
} catch (e) {}

const now = new Date();

if (now < new Date(validFromDate)) {
status = 'Срок действия не наступил';
} else if (now > new Date(validToDate)) {
status = 'Срок действия истек';
} else if (!hasPrivateKey) {
status = 'Нет привязки к закрытому ключу';
} else if (!isValid) {
status =
'Ошибка при проверке цепочки сертификатов. Возможно на компьютере не установлены сертификаты УЦ, выдавшего ваш сертификат';
} else {
status = 'Действителен';
}

createCertList.push({
id: certApi.objid,
issuerInfo: friendlyInfo(issuerInfo, 'issuerInfo'), // Издатель сертификата
subjectInfo: friendlyInfo(subjectInfo, 'subjectInfo'), // Имя субъекта
privateKey, // Закрытый ключ
serialNumber, // Серийный номер
thumbprint, // Отпечаток
validFromDate, // Дата, с которой сертификат действителен
validToDate, // Дата, до которой сертификат действителен
keyAlgorithm, // Алгоритм ключа
privateKeyLink, // Ссылка на закрытый ключ
status,
});
}

oStore.Close();

return createCertList;
} catch (error) {
throw new Error(error.message);
}

Отредактировано пользователем 13 февраля 2024 г. 12:39:30(UTC)  | Причина: Не указана

Offline iiigori  
#4 Оставлено : 13 февраля 2024 г. 14:06:28(UTC)
iiigori

Статус: Новичок

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

Сказал(а) «Спасибо»: 2 раз
oshibk1a.JPG (70kb) загружен 5 раз(а).

вот что появляется
Offline Андрей *  
#5 Оставлено : 13 февраля 2024 г. 15:53:05(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2201 раз в 1717 постах
Потому что обращаетесь за privateKey.
Зачем? Уберите и не будет диалогов
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
iiigori оставлено 13.02.2024(UTC)
Offline Русев Андрей  
#6 Оставлено : 13 февраля 2024 г. 15:55:58(UTC)
Русев Андрей

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,416

Сказал(а) «Спасибо»: 37 раз
Поблагодарили: 565 раз в 393 постах
Кажется, вы путаете понятия ключа и сертификата. Приложил выдержку из man csptest
Код:

user@test-x64-ub16:~$ man csptest
...
Термины и определения
       Ключ (открытый, закрытый/секретный) - математический элемент в
       криптографии с открытым ключом. Используется для подписи, проверки
       подписи и протоколов согласования ключей.

       Сертификат - открытый ключ и информация о субъекте, подписанная
       удостоверяющим центром.

       Хранилище сертификатов - абстракция, в которой на компьютере хранятся
       сертификаты.  У хранилища есть имя, которое определяет его назначение
       (my - личные сертификаты, root - доверенные корневые сертификаты, ca -
       сертификаты промежуточных УЦ и CRLи, cache), а также флаг владельца
       (текущий пользователь или локальный компьютер).

       Контейнер - абстракция, в которой хранится закрытый ключ подписи или
       закрытый ключ для согласования ключей, или оба.  В редких случаях в нём
       может храниться ключ других типов, но в обычной практике такое не
       случается.  У контейнера есть имя, сгенерированное или заданное
       пользователем.  Имя контейнера имеет короткую форму (только имя) и
       несколько расширенных форм, в которые могут входить имя считывателя
       и/или уникальное имя носителя.

       Носитель (сменный носитель) - место, где физически хранятся контейнеры.

       Считыватель - устройство для чтения носителей. Токен - это считыватель
       и носитель в виде одного устройства.

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

       Ссылка на закрытый ключ - атрибут личного сертификата в хранилище (my),
       в которой указано имя соответствующего контейнера, тип ключа, тип и имя
       провайдера.  Таким образом можно "подписывать сертификатом", что на
       самом деле означает неявную подпись ключом из контейнера по ссылке.
...
Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
iiigori оставлено 13.02.2024(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.