CryptographicException:拒绝访问 - 如何在用户存储上提供访问权限?

时间:2016-06-23 17:50:53

标签: c# wpf windows security

我正在尝试从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帖子无法解决我的问题。我认为当前用户可能无法访问自己的私钥库。但是我怎么能提供这种访问权限?

2 个答案:

答案 0 :(得分:5)

如果有人在寻找类似问题的解决方案,请发布修正。我运行了sysinternal进程监视器,并意识到构造函数调用正在机器密钥文件夹中创建一个密钥,并授予用户访问机器密钥的权限。

答案 1 :(得分:0)

只要能对某人有所帮助,“ CryptographicException:访问被拒绝”可能是由于光盘空间不足引起的,这就是我的情况。