这是我试图启用的场景:
我希望通过客户端证书从我的 Web 服务应用程序(Azure 服务结构)对 Azure Keyvault 进行身份验证。
这些是我正在执行的步骤:
- 将证书添加到我的 Azure key 保管库(自签名)
- 通过 azure powershell (pfx) 下载证书
- 创建 Azure 应用实例来识别我的应用
- 将证书与应用关联
- 为 Azure 应用创建服务主体
- 授予主体对 keyvault 的访问权限
一切看起来都不错。当我启动服务(本地服务结构集群)并尝试连接到 keyvault 以检索我存储在其中的 key +值时,出现错误:
CryptographicException: "KeySet does not exist"
当我尝试在运行时检查 X509Certificate2 对象的 PrivateKey 属性值时,它会引发相同的异常。
找到了证书,并且存在私钥(我通过 MMC 以及一些命令行工具验证了这一点)。
我可能会错过什么?我能想到的导致此失败的唯一原因是服务结构用户上下文(我认为是网络服务)无权查看私钥?它存储在“LocalMachine”证书存储中,位于 Personal”文件夹(也称为“My”)。据我所知,应用程序应该能够在没有特殊权限的情况下从 LocalMachine 存储中读取数据?
最佳答案
另一种更简单的方法来授予NETWORK SERVICE
用户对证书私钥的权限(比我的其他答案更容易):
- 在 MMC 中打开证书管理单元:
WIN
+R
-> 类型mmc
-> 文件 -> 添加/删除管理单元-> 添加证书(计算机帐户)。 - 找到您的证书 -> 右键单击并选择“所有任务/管理私钥”
- 授予
NETWORK SERVICE
用户读取
权限
关于c# - 服务结构: Authenticating with Azure KeyVault via cert: "KeySet does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964941/