c# - 服务结构: Authenticating with Azure KeyVault via cert: "KeySet does not exist"

标签 c# azure certificate azure-keyvault

这是我试图启用的场景:

我希望通过客户端证书从我的 Web 服务应用程序(Azure 服务结构)对 Azure Keyvault 进行身份验证。

这些是我正在执行的步骤:

  1. 将证书添加到我的 Azure key 保管库(自签名)
  2. 通过 azure powershell (pfx) 下载证书
  3. 创建 Azure 应用实例来识别我的应用
  4. 将证书与应用关联
  5. 为 Azure 应用创建服务主体
  6. 授予主体对 keyvault 的访问权限

一切看起来都不错。当我启动服务(本地服务结构集群)并尝试连接到 keyvault 以检索我存储在其中的 key +值时,出现错误:

CryptographicException: "KeySet does not exist"

当我尝试在运行时检查 X509Certificate2 对象的 PrivateKey 属性值时,它会引发相同的异常。

找到了证书,并且存在私钥(我通过 MMC 以及一些命令行工具验证了这一点)。

我可能会错过什么?我能想到的导致此失败的唯一原因是服务结构用户上下文(我认为是网络服务)无权查看私钥?它存储在“LocalMachine”证书存储中,位于 Personal”文件夹(也称为“My”)。据我所知,应用程序应该能够在没有特殊权限的情况下从 LocalMachine 存储中读取数据?

最佳答案

另一种更简单的方法来授予NETWORK SERVICE用户对证书私钥的权限(比我的其他答案更容易):

  1. 在 MMC 中打开证书管理单元:WIN + R -> 类型 mmc -> 文件 -> 添加/删除管理单元-> 添加证书(计算机帐户)。
  2. 找到您的证书 -> 右键单击​​并选择“所有任务/管理私钥”
  3. 授予 NETWORK SERVICE 用户读取权限

关于c# - 服务结构: Authenticating with Azure KeyVault via cert: "KeySet does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964941/

相关文章:

c# - 验证登录表单 ASP.NET MVC

c# - 自动映射器映射动态对象

c# - 通过标签加载图片

c# - 创建 C# 应用程序以配置打印机页面设置

java - KeyStore Explorer - 创建 key 对?

来自 SCEP 请求的 Java PKIHeader

c# - 如何在接收器事件中心编辑 EvenData 消息?

git - Azure devops 存储库和 TFVC 之间有什么关系?在 GIT 和 TFVC 之间进行选择的选项在哪里?

azure - 使用 Powershell 脚本将 azure sql 数据库差异备份到存储帐户 blob 存储

javascript - 如何在 Node.js 0.11.8 及更高版本中使用 tlsSocket.renegotiate(options, callback)