Код: Выделить всё
using (FileStream stream = System.IO.File.OpenRead(certificatePath))
{
using (BinaryReader reader = new BinaryReader(stream))
{
buffer = reader.ReadBytes((int)stream.Length);
}
}
X509Certificate2 certificate = new X509Certificate2(buffer, password);
System.Security.Cryptography.CryptographicException: доступ запрещен.
в
System.Security. Cryptography.CryptographicException.ThrowCryptographicException(Int32
hr) at
System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[]
rawData, пароль IntPtr, UInt32 dwFlags, логическое значение persistKeySet,
SafeCertContexThandle & PCERTCTX) at
System.security.cryptography.x509Certificates.x509Certificate.loadCertificateFromBlob (byte []
rawdata, объектный пароль, x509keystrageflags keyStorageflags) at
system.cry.crypry.crypry.xry.xry.crypress.crypress.crypryftrageflags. X509Certificate2..ctor(Byte[]
rawData, строковый пароль) в
HelloWorld.HelloClient.Models.Infrastructure.ReadCertificateFromPfxFile(String
certificatePath, строковый пароль)
Последняя строка фрагмента вызывает исключение, и если я запускаю его от имени администратора, все работает нормально. Похоже, проблема заключается в том, что конструктор X509Certificate2 по умолчанию пытается поместить закрытый ключ в хранилище пользователя. Я не использую веб-приложение. этот пост не решает мою проблему. Я думаю, что текущий пользователь может не иметь доступа к своему собственному хранилищу закрытых ключей. Но как я могу предоставить этот доступ?
Подробнее здесь: https://stackoverflow.com/questions/379 ... user-store