Да другое поведение, там просто список отображается и все.
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)
| Причина: Не указана