Добрый день. Столкнулся с такой проблемой при использовании классов .net для создания подписанного сообщения.
На вызове SignedCms.ComputeSignature выдается исключение CryptographicException с кодом 0x80090020, что означает NTE_FAIL (Внутренняя ошибка).
На winxp sp3 ошибка не проявляется (пока), на w7x64 возникла только однажды, а на w8 x86 и x64(используется КриптоПРО 3.6 R3) возникает стабильно (но не каждый раз).
Начальные условия:
•Сертификаты (разумеется ГОСТ) хранятся в специально созданном хранилище, например teststore, в ветке текущего пользователя
•Установка сертификатов производится при помощи оснастки КриптоПРО 3.6
•При создании сообщения в него НЕ должен добавляться сертификат (используется IncludeOption = X509IncludeOption.None)
В чем может быть причина такого странного поведения? Как добиться нормальной работы?? Спасибо.
Вот рабочий код.
class Program
{
static void Main(string[] args)
{
X509Store store = new X509Store("teststore");
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2 cert = getCert(store);
new SignedCmsTest1().Run(cert);
store.Close();
}
private static X509Certificate2 getCert(X509Store store)
{
string sn = "000f0852542000292ac7";
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, sn, true);
X509Certificate2 cert = certs.Cast<X509Certificate2>().FirstOrDefault(f => f.HasPrivateKey);
Debug.Assert(cert != null, "Не удалось найти сертификат: " + sn);
return cert;
}
}
class SignedCmsTest1
{
private byte[] sign(X509Certificate2 certificate, byte[] data)
{
ContentInfo content = new ContentInfo(data);
SignedCms scms = new SignedCms(content);
CmsSigner signer = new CmsSigner(certificate) { IncludeOption = X509IncludeOption.None };
scms.ComputeSignature(signer, false); //здесь выдается исключение CryptographicException с кодом 0x80090020
return scms.Encode();
}
public void Run(X509Certificate2 cert)
{
byte[] data = new byte[100];
sign(cert, data);
}
}
Отредактировано пользователем 22 апреля 2013 г. 13:29:34(UTC)
| Причина: Не указана