繁体   English   中英

Azure Web应用程序新X509Certificate2()导致System.Security.Cryptography.CryptographicException:访问被拒绝

[英]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 本身编码了密钥属于机器密钥集,那么机器密钥库(需要管理员)。
    • 否则用户密钥库(可能需要配置文件)。

鉴于“拒绝访问”,我猜你会遇到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM