CryptoPro / libcore

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Логирование

tonisimakov99 opened this issue · comments

Возможно ли внутреннее логирование? Что-то навроде:

ILogger someLogger;
Initializer.Initialize(someLogger);

Добрый день.

А что именно хочется логировать?

Зравствуйте, например, хочется здесь как-то понять, что конкретно произошло, скорее всего проблема в моем коде, но дополнительная информация бы не помешала:

LibCore.Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: Cryptography error
   at LibCore.Internal.NativeCrypto.CapiHelper.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   at LibCore.Security.Cryptography.Gost3410_2012_256CryptoServiceProvider.get_SafeProvHandle()
   at LibCore.Security.Cryptography.Gost3410_2012_256CryptoServiceProvider.get_SafeKeyHandle()
   at LibCore.Security.Cryptography.Gost3410_2012_256CryptoServiceProvider.GetKeyPair()
   at LibCore.Security.Cryptography.Gost3410_2012_256CryptoServiceProvider..ctor(CspParameters parameters)
   at LibCore.Internal.Cryptography.Pal.CertificatePal.<>c.<GetGost3410_2012_256PrivateKey>b__73_0(CspParameters csp)
   at LibCore.Internal.Cryptography.Pal.CertificatePal.GetPrivateKey[T](Func`2 createCsp, Func`2 createCng, Func`3 createNoPersistCsp)
   at LibCore.Internal.Cryptography.Pal.CertificatePal.GetGost3410_2012_256PrivateKey()
   at LibCore.Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPrivateKey[T](X509Certificate2 certificate, Predicate`1 matchesConstraints)
   at LibCore.Security.Cryptography.X509Certificates.Gost3410CertificateExtensions.GetGost3410_2012_256PrivateKey(X509Certificate2 certificate)
   at Internal.Cryptography.Pal.Windows.PkcsPalWindows.GetPrivateKey[T](X509Certificate2 certificate, Boolean silent, Boolean preferNCrypt)
   at Internal.Cryptography.Pal.Windows.PkcsPalWindows.GetPrivateKeyForSigning[T](X509Certificate2 certificate, Boolean silent)
   at LibCore.Security.Cryptography.GostCmsSignature.Gost2012_256CmsSignature.Sign(ReadOnlySpan`1 dataHash, HashAlgorithmName hashAlgorithmName, X509Certificate2 certificate, AsymmetricAlgorithm key, Boolean silent, String& signatureAlgorith
m, Byte[]& signatureValue)
   at LibCore.Security.Cryptography.GostCmsSignature.Sign(ReadOnlySpan`1 dataHash, HashAlgorithmName hashAlgorithmName, X509Certificate2 certificate, AsymmetricAlgorithm key, Boolean silent, String& oid, ReadOnlyMemory`1& signatureValue)
   at LibCore.Security.Cryptography.Pkcs.Detours.CmsSignerDetour.Prefix(ReadOnlyMemory`1 data, String contentTypeOid, Boolean silent, X509Certificate2Collection& chainCerts, CmsSigner __instance, Object& __result)
   at System.Security.Cryptography.Pkcs.CmsSigner.Sign_Patch1(CmsSigner this, IntPtr retbuf, ReadOnlyMemory`1 data, String contentTypeOid, Boolean silent, X509Certificate2Collection& chainCerts)
   at System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(CmsSigner signer, Boolean silent)

Также в методе Initializer.Initialize() вижу флаг debug, он как-то этому способствует?

В вашем случае никакого доп логирования нет. debug пишет лог установки исправлений при инициализации.

Судя по стеку - ошибка при открытии контейнера ключа сертификата. Проверить, что контейнер ключа сертификата успешно проверяется через csptest (или cptools) + что выданы права на данный ключ для пользователя, из под которым выполняется программа + убедиться, что пин на контейнер не задан или корректно указан (если всё же задан) ранее по коду.

  • из полезного посмотреть код ошибки в перехваченном исключении (должен лежать в свойстве HResult или ему подобным в виде int).