diff --git a/packages/cryptopro-cades/src/Certificate.ts b/packages/cryptopro-cades/src/Certificate.ts index 92ad139..317c397 100644 --- a/packages/cryptopro-cades/src/Certificate.ts +++ b/packages/cryptopro-cades/src/Certificate.ts @@ -171,27 +171,25 @@ export class Certificate { cert.Export(CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64), ); - if (checkPrivateKey) { - try { - certificate.hasPrivateKey = await unwrap(cert.HasPrivateKey()); - - const oPrivateKey = await unwrap(cert.PrivateKey); - - certificate.providerName = await unwrap(oPrivateKey.ProviderName); - certificate.providerType = await unwrap(oPrivateKey.ProviderType); - - if (certificate.hasPrivateKey) { - await unwrap(cert.FindPrivateKey()); - } - } catch (error) { - // ошибка не критична, просто создаем ошибку (в дебаге оно залогируется само) - CryptoError.createCadesError( - error, - `Ошибка получения информации о приватном ключе сертификата ${certificate.thumbprint}.`, - ); - - certificate.hasPrivateKey = false; + try { + certificate.hasPrivateKey = await unwrap(cert.HasPrivateKey()); + + const oPrivateKey = await unwrap(cert.PrivateKey); + + certificate.providerName = await unwrap(oPrivateKey.ProviderName); + certificate.providerType = await unwrap(oPrivateKey.ProviderType); + + if (checkPrivateKey && certificate.hasPrivateKey) { + await unwrap(cert.FindPrivateKey()); } + } catch (error) { + // ошибка не критична, просто создаем ошибку (в дебаге оно залогируется само) + CryptoError.createCadesError( + error, + `Ошибка получения информации о приватном ключе сертификата ${certificate.thumbprint}.`, + ); + + certificate.hasPrivateKey = false; } parseCertificate(certificate); diff --git a/packages/cryptopro-cades/src/api/findCertificateBySkid.ts b/packages/cryptopro-cades/src/api/findCertificateBySkid.ts index 3de9540..429ca6b 100644 --- a/packages/cryptopro-cades/src/api/findCertificateBySkid.ts +++ b/packages/cryptopro-cades/src/api/findCertificateBySkid.ts @@ -8,14 +8,14 @@ import { getCertificates } from './../api'; * Поиск в хранилищах сертификата. * @param {string} subjectKeyId -идентификатор ключа субъекта. * @param {STORE_TYPE} storeType в каком хранилище требуется поискать сертификат (из токена, реестра, все...). - * @param {boolean} [checkPrivateKey=false] проводить проверку наличия закрытого ключа. + * @param {boolean} [checkPrivateKey=true] проводить проверку наличия закрытого ключа. * @throws {CryptoError} в случае ошибки. * @returns {@Promise} сертификат. */ export async function findCertificateBySkid( subjectKeyId: string, storeType: STORE_TYPE = STORE_TYPE.ALL, - checkPrivateKey: boolean = false, + checkPrivateKey: boolean = true, ): Promise { if (!subjectKeyId) { const errorMessage = diff --git a/packages/cryptopro-cades/src/api/findCertificateByThumbprint.ts b/packages/cryptopro-cades/src/api/findCertificateByThumbprint.ts index caa7de7..e121790 100644 --- a/packages/cryptopro-cades/src/api/findCertificateByThumbprint.ts +++ b/packages/cryptopro-cades/src/api/findCertificateByThumbprint.ts @@ -9,11 +9,13 @@ import { unwrap } from './internal/unwrap'; /** * Поиск в хранилищах сертификата. * @param {string} thumbprint -отпечаток искомого сертификата. + * @param {boolean} [checkPrivateKey=true] проводить проверку наличия закрытого ключа. * @throws {CryptoError} в случае ошибки. * @returns {Promise} сертификат. */ export async function findCertificateByThumbprint( thumbprint: string, + checkPrivateKey: boolean = true, ): Promise { if (!thumbprint) { const errorMessage = 'Не указан отпечаток искомого сертификата.'; @@ -35,7 +37,7 @@ export async function findCertificateByThumbprint( ); const cert = await unwrap(certFind.Item(1)); - return cert ? await Certificate.CreateFrom(cert) : undefined; + return cert ? await Certificate.CreateFrom(cert, checkPrivateKey) : undefined; } catch (err) { throw CryptoError.createCadesError(err, 'Ошибка получения сертификата.'); } finally {