代码之家  ›  专栏  ›  技术社区  ›  Tom

正在从Azure KeyVault加载X509证书

  •  1
  • Tom  · 技术社区  · 6 年前

    我们有一个托管在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获取证书有什么关系。

    2 回复  |  直到 6 年前
        1
  •  2
  •   cjcrobin    6 年前

    我认为更好的解决方法是 Managed Service Identity(MSI) 如适用。MSI功能将在Azure AD中创建一个服务主体,以表示服务/虚拟机的标识。并在密钥保管库中分配此服务主体属性角色或权限,这可以通过在密钥保管库的“设置-访问策略”部分中创建新的访问策略来完成。服务主体应与服务名称相同。如果通过powershell创建,则此名称可以不同。

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

        2
  •  0
  •   Tom Sun    6 年前

    有没有合适的方法?我看到过使用证书存储的引用,但我不太确定这与从KeyVault获取证书有什么关系。

    在您的情况下,似乎您只是从keyvault加载证书,但证书没有部署到Azure WebApp。关于如何通过密钥保管库部署Azure Web App证书,您可以从下面获得详细步骤 blog .

    在Azure WebApp中使用证书的最简单方法是 upload the pfx file to the Azure WebApp 从Azure门户添加一个名为 网站\u加载\u证书 并将其值设置为证书的指纹。 但与KeyVault没有关系 .