Closed Cyber-Watcher closed 1 year ago
Добрый день.
Для начала можно попробовать выключить TieredCompilation
в csproj проекта:
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
Также поможет, если есть возможность встать отладчиком в ToCryptographicException
(символы не обязательно подтягивать) и посмотреть, что за код ошибки в hr
.
Также если есть возможность - приложить pfx сертификата, на котором воспроизводится ошибка.
Разве эта та же самая ошибка?
В файле проекта я добавил то что рекомендовалось
`
</PropertyGroup>`
Это не помогло. Кстати тестировал уже и с последней либой LibCore 2023.7.31.1
И это только на РЕД ОС, такая ерунда
На Fedora 38 + ГОСТ 2012_256 пока не воспроизводим, RedOs посмотрим чуть позже.
Также на всякий случай уточню - введена лицензия на csp? Успешно ли проходить проверка контейнера ключа?
Лицензия не введена. Проверка контейнера ключа проходит
CSP (Type:80) v5.0.10012 KC1 Release Ver:5.0.12800 OS:Linux CPU:AMD64 FastCode:READY:AVX,AVX2. DISABLED:RSA; AcquireContext: OK. HCRYPTPROV: 6840723 GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP Container name: "xxxxxxx" Check header passed. Signature key is not available. Exchange key is available. HCRYPTKEY: 0x687ef3 Symmetric key is not available. UEC key is not available. License: Good license (expires in 161 days) Check container passed. Check sign passed. Check verify signature on private key passed. Check verify signature on public key passed. Check import passed. Certificate in container matches AT_KEYEXCHANGE key. Keys in container: exchange key Extensions: OID: 1.2.643.2.2.37.3.10 PrivKey: Not specified - 09.04.2024 20:38:14 (UTC) Total: SYS: 0,000 sec USR: 0,020 sec UTC: 0,030 sec [ErrorCode: 0x00000000]
После обновления в приложении до последней версии вашей либы стала появляться такая ошибка:
System.Exception: Can not find Pal.RawData property at LibCore.Security.Cryptography.X509Certificates.X509CertificateExtensions.get_RawDataPropertyInfo() at LibCore.Security.Cryptography.X509Certificates.X509CertificateExtensions.OriginalPalRawData(X509Certificate cert) at LibCore.Security.Cryptography.X509Certificates.Detours.Pal.CertificatePalProxyHelper.SubstitutePalForInstanceWithNew(X509Certificate intance) at LibCore.Security.Cryptography.X509Certificates.X509CertificateExtensions.Pal(X509Certificate cert, Boolean substitutePalIfNull) at LibCore.Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPublicKey[T](X509Certificate2 certificate, Predicate1 matchesConstraints) at LibCore.Security.Cryptography.X509Certificates.Gost3410CertificateExtensions.GetGost3410_2012_256PublicKey(X509Certificate2 certificate) at LibCore.Security.Cryptography.GostCmsSignature.Gost2012_256CmsSignature.VerifySignature(ReadOnlySpan1 valueHash, ReadOnlyMemory1 signature, String digestAlgorithmOid, HashAlgorithmName digestAlgorithmName, Nullable1 signatureParameters, X509Certificate2 certificate) at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.VerifySignature(GostCmsSignature signatureProcessor, X509Certificate2 certificate, Boolean compatMode, SignerInfo instance) at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.Prefix(X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly, SignerInfo __instance) at System.Security.Cryptography.Pkcs.SignerInfo.Verify_Patch1(SignerInfo this, X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly) at System.Security.Cryptography.Pkcs.SignerInfo.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly) at System.Security.Cryptography.Pkcs.SignedCms.CheckSignatures(SignerInfoCollection signers, X509Certificate2Collection extraStore, Boolean verifySignatureOnly) at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly) at Vekas.CryptoSignerService.Business.CryptoSignerLinux.Sign(String text) in E:\TempGit\CryptoSigner_master_2023-07-31_12-51-30\Software\Vekas.CryptoSignerService\Business\CryptoSignerLinux.cs:line 83 at CryptoSignerService.Managers.CommandManager.SetCommand(BaseCSDto`1 apiCommand) in E:\TempGit\CryptoSigner_master_2023-07-31_12-51-30\Software\Vekas.CryptoSignerService\Managers\CommandManager.cs:line 64
83 строка у меня вот так выглядит signedCms.CheckSignature(true);
64 так Logger.Info(this, "Begin cryptosigning " + cryptoProSigner.GetType().Name);
Про "Pal.RawData" - вчера дополнительно выпустили релиз с hotfix данной проблемы (в релизах последний доступный релиз с минорной компонентой версии ".2", данная ошибка должна уйти на нём.
и еще один момент пробовал и с версией 12600, все тоже самое. Минорную не пробовал. Сейчас затестим.
Поставил последнюю минорную .2 ошибка действительно ушла эта
На редос 7.3.2 с сертификатом ГОСТ 2012 256 не воспроизводим
Сертификат: пароль на pfx - пустой. test_gost_256_client_2022_GOST R 34.10.2012-256.pfx.zip
using (var store = new CpX509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadOnly);
if (store.Certificates > 0)
{
var cert = storeCerts.Find(X509FindType.FindByThumbprint, "476a5547559ad9df06b091548632626ab123401a", false)[0];
byte[] bytesToHash = Encoding.Default.GetBytes("DATA");
using (var gostCert = cert)
{
var contentInfo = new ContentInfo(bytesToHash);
var signedCms = new SignedCms(contentInfo, false);
CmsSigner cmsSigner = new CmsSigner(gostCert);
signedCms.ComputeSignature(cmsSigner);
var signature = signedCms.Encode();
signedCms.Decode(signature);
signedCms.CheckSignature(true);
var d = Convert.ToBase64String(signature);
return;
}
}
throw new Exception();
}
Посмотрите пожалуйста код ошибки в исключении WindowsCryptographicException
, которое у вас пробрасывается, он должен быть в поле HResult
.
Да у меня сейчас после последнего вашего патча ошибки ушли. Все вроде бы подписалось у меня на тестовом стенде. На неделе буду у заказчика развертывать уже в продакшене если что-то вылезет отпишусь. И я уже запускаю готовую сборку под РедОС, а рабочая станция у меня Linux Mint 21.2 + Rider. На набочей станции у меня таких ошибок вообще не возникало, это только под РедОС началось, когда заказчик сказал что он наше ПО будер разворачивать под этой ОС. Хотя мы рекомендовали Ubuntu 22.04. Заработало на КриптоПро 12600 и вашей либе с последним фиксом. На КриптоПро 12800 тоже глючило. Но собственно я с вами не прощаюсь :). Так как модуль работы с КриптоПро, это важная часть нашего ПО, то я тут еще буду вам ✍
C csp 12800 ожидаемы некоторые проблемы, в следующем релизе должны уйти.
В текущей опубликованной ночной сборке их быть не должно - можно потестировать ещё и на ней https://github.com/CryptoPro/libcore/issues/17#issuecomment-1656585403
Раз вопрос решился пока что - багу закрываю, если что то появится - можно переоткрыть или завести новую.
Добрый день! Появилась другая ошибка. Воодные данные по версии КриптоПро и либы те же что и выше.
2023-08-03 16:41:55.950 [INF] CryptoSignerLinux:Sign - user System - message - This certificate HasPrivateKey = True
2023-08-03 16:42:26.118 [ERR] An unhandled exception has occurred while executing the request.
System.Security.Cryptography.CryptographicException: The certificate chain is incomplete, the self-signed root authority could not be determined.
at LibCore.Security.Cryptography.Pkcs.Detours.CmsSignerDetour.Prefix(ReadOnlyMemory1 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)
at Vekas.CryptoSignerService.Business.CryptoSignerLinux.Sign(String text) in E:\TempGit\CryptoSigner_master_2023-08-01_14-19-46\Software\Vekas.CryptoSignerService\Business\CryptoSignerLinux.cs:line 79
at CryptoSignerService.Managers.CommandManager.SetCommand(BaseCSDto`1 apiCommand) in E:\TempGit\CryptoSigner_master_2023-08-01_14-19-46\Software\Vekas.CryptoSignerService\Managers\CommandManager.cs:line 64
at lambda_method2(Closure , Object , Object[] )
Добрый день! Эта ошибка повторяется постоянно, и подпись соответственно не делается. Версия вашей либы 2023.5.30.1
На убунту 22.04 мой код прекрасно работает и подписывает документы и строки, а на РЕД ОС 7.3.2 не хочет.
Версия КриптоПРо Ver:5.0.12600 (на 12800 тоже не пошло на ред ос)
Сразу вводные данные:
NAME="RED OS" VERSION="MUROM (7.3.2)" PLATFORM_ID="platform:el7" ID="redos" ID_LIKE="rhel centos fedora" VERSION_ID="7.3.2" PRETTY_NAME="RED OS MUROM (7.3.2)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redos:redos:7" HOME_URL="http://red-soft.ru/ru/main_products.html#redos" BUG_REPORT_URL="http://redos-support.red-soft.ru" EDITION="Standard"
На РЕД ОС такая ошибка:
64 строка:
foreach (var crt in storeCerts)
79 строка:signedCms.ComputeSignature(cmsSigner);
Более подобно описывал проблему тут https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=142158#post142158