从 Azure 密钥保管库加载 X509证书



我们有一个托管在 Azure 中的 Web 应用程序,用于从 KeyVault 加载证书,以用于与其他服务进行加密和身份验证。从 KeyVault 读取值后,我们将创建如下所示的证书:

return new X509Certificate2(Convert.FromBase64String(secret.Value), string.Empty,
                    X509KeyStorageFlags.MachineKeySet |
                    X509KeyStorageFlags.PersistKeySet |
                    X509KeyStorageFlags.Exportable);

我们看到了很多关于"密钥集不存在"和"请求已中止:无法创建 SSL/TLS 安全通道"的错误。

我怀疑这是因为它将私钥保存到磁盘(C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys(,这在尝试再次读取它时会导致问题,因为它是一个共享托管环境,我们并不完全拥有这台机器。

有没有正确的方法可以做到这一点?我已经看到了使用证书存储的引用,但我不太确定这与从 KeyVault 获取证书有何关系。

我认为更好的解决方案是使用托管服务身份(MSI((如果适用(。MSI 功能将在 Azure AD 中创建一个服务主体来表示服务/VM 的标识。并在密钥保管库中分配此服务主体属性角色或权限,这可以通过在密钥保管库的"设置 ->访问策略"部分中创建新的访问策略来完成。服务主体应与服务名称相同。如果通过Powershell创建,则此名称可能会有所不同。

进行 MSI 设置后,可以将证书或机密上传到密钥保管库并在服务中访问。

有没有正确的方法可以做到这一点?我已经看到了使用证书存储的引用,但我不太确定这与从 KeyVault 获取证书有何关系。

在你的情况下,似乎只是从密钥保管库加载证书,但证书未部署到 Azure Web 应用。有关如何通过密钥保管库部署 Azure Web 应用证书,可以从此博客获取详细步骤。

在 Azure Web App

中使用证书的最简单方法是,可以从 Azure 门户将 pfx 文件上传到 Azure Web App,并添加名为 WEBSITE_LOAD_CERTIFICATES 的应用设置,并将其值设置为证书的指纹。但与KeyVault没有任何关系

相关内容

  • 没有找到相关文章

最新更新