我正在尝试从WPF应用程序中的pfx文件加载证书,它给我一个访问被拒绝错误。
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(字节[] rawData,IntPtr密码,UInt32 dwFlags,布尔persistKeySet, SafeCertContextHandle&安培; pCertCtx)at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(字节[] rawData,Object password,X509KeyStorageFlags keyStorageFlags)at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(字节[] rawData,String password)at HelloWorld.HelloClient.Models.Infrastructure.ReadCertificateFromPfxFile(字符串 certificatePath,String password)
代码段中的最后一行导致异常,如果我以管理员身份运行它就可以了。问题似乎是X509Certificate2的默认构造函数尝试将私钥放在用户存储中。我没有使用Web应用程序。 this帖子无法解决我的问题。我认为当前用户可能无法访问自己的私钥库。但是我怎么能提供这种访问权限?
答案 0 :(得分:5)
如果有人在寻找类似问题的解决方案,请发布修正。我运行了sysinternal进程监视器,并意识到构造函数调用正在机器密钥文件夹中创建一个密钥,并授予用户访问机器密钥的权限。
答案 1 :(得分:0)
只要能对某人有所帮助,“ CryptographicException:访问被拒绝”可能是由于光盘空间不足引起的,这就是我的情况。