[英]C# new X509Certificate2(path) PKCS#7/P7B -> System.Security.Cryptography.CryptographicException: 'Cannot find object or property'
[英]Azure Web Application new X509Certificate2() causing System.Security.Cryptography.CryptographicException: Access denied
现在我上传一个.pfx文件,输入密码并打电话
var cert = new X509Certificate2(fileData, password);
并存储指纹等内容。我不需要将其实际存储在服务器上,只需验证它是否是有效的证书并存储一些信息。 在本地这个工作(显然我有更好的访问我的密钥库)但是当我把它放在天蓝色时我得到错误:
System.Security.Cryptography.CryptographicException:拒绝访问。
有没有办法让这些信息回避这个或使用这种方法而不会被拒绝访问? 我对证书不是很了解,所以如果您需要更多信息请告诉我。 谢谢。
在Windows上打开PFX时,任何私钥都会写入磁盘。 它们将在以后删除(除非您指定PersistKeySet),但它们仍然必须写入(ish)。
他们在哪里写的?
X509KeyStorageFlags.MachineKeySet
:在计算机密钥库中,您需要是管理员。 X509KeyStorageFlags.UserKeySet
:在用户密钥库中,您的用户配置文件可能需要存在/加载。 鉴于“拒绝访问”,我猜你会遇到PFX本身指定机器密钥库的情况,为了解决这个问题你要改变你的呼叫
new X509Certificate2(fileData, password, X509KeyStorageFlags.UserKeySet)
一切都应该有效。 如果您指定UserKeySet并仍然收到错误,那可能是配置文件加载问题。
可以选择在不将私钥写入磁盘的情况下加载PFX,但它在.NET Framework中不可用(尽管最近已添加到.NET Core中)。 如果您确实需要它,可以查看p /使用PKCS12_NO_PERSIST_KEY
标志调用PFXImportCertStore ,然后将生成的HCERTSTORE值传递给X509Store.ctor(IntPtr)并通过X509Store.Certificates
属性读取您的证书。 但请注意,大多数.NET Framework都不会理解这些证书对象具有关联的私钥,因此它们可能只会作为公共证书对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.