【问题标题】:.NET Core app can't find uploaded certificate in production [Azure Key Vault].NET Core 应用在生产中找不到上传的证书 [Azure Key Vault]
【发布时间】:2022-01-25 18:01:00
【问题描述】:

我最近阅读了很多关于使用 Azure Key Vault 管理机密的内容。我设法在带有 Ubuntu 20.04 的服务器中创建并安装了一个 .pfx 证书,并在 these steps 之后将该证书上传到了我的 Azure AD。

在连接到我的 Key Vault 之前正确找到了证书,并且在我从 Windows 和 Linux (WSL) 进行开发时检索了机密。但是,当我将应用程序部署到我的生产服务器时,我创建的用于管理 kestrel 的 the service 会引发“core-dump”错误,类似于 this issue

但就我而言,当我查看日记时,我发现以下内容:

Unhandled exception. System.InvalidOperationException: Sequence contains no elements

令人惊讶的是,如果我只是使用“dotnet app.dll”手动运行应用程序,则不会发生这种情况。

这怎么可能?如果我手动运行它,它会打开商店,找到证书并访问机密,但在服务运行时找不到任何东西。

这是我用来在我的 Program.cs 中配置对 Key Vault 的访问的相关代码:

// Azure Key Vault configuration.
using var store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, configuration["KeyVault:AzureADCertThumbprint"], false);

configuration.AddAzureKeyVault(
    new Uri($"https://{configuration["KeyVault:KeyVaultName"]}.vault.azure.net/"),
    new ClientCertificateCredential(configuration["KeyVault:AzureADDirectoryId"], configuration["KeyVault:AzureADApplicationId"], certs.OfType<X509Certificate2>().Single()),
    new KeyVaultSecretManager());

store.Close();

谁能帮我找到问题?提前致谢。

【问题讨论】:

  • 您正在将 CurrentUser 证书存储用于 keyvault 连接凭据。作为服务运行时的用户是否与手动运行时的用户相同?我猜不是,而且服务用户没有密钥库连接证书。 (因此certs.OfType&lt;X509Certificate2&gt;().Single() 失败)
  • 解决了!我将服务中的用户 www-data 更改为我的实际用户,现在一切正常。谢谢!

标签: c# azure asp.net-core certificate


【解决方案1】:
  • 我检查了一些 Microsoft 文档,但没有发现访问密钥保管库的代码有任何问题。我猜您可能会忘记门户网站上application setting 中的某些内容,因为您的代码没有问题。

  • 创建证书后,配置 Azure AD 并关联证书,之后我们可以使用 X509 证书从 .NET 客户端访问 Azure Key Vault

  • 导入证书并将证书数据转换为 Base64 后,我们应该创建 Azure 资源管理器 AD 应用程序和服务主体。为 Azure Key Vault 成功配置 Azure 资源管理器应用程序和服务主体可以解决您面临的问题。

查看Accessing Azure Key Vaults Using CertificationSetup Key Vault using Azure AD Application and Certificates 了解更多信息。

【讨论】:

  • 感谢您的回答。我相信 Azure 门户中的配置是正确的,否则如果我手动运行应用程序,我将无法访问开发中的保管库,甚至无法从我的生产服务器访问。只有当应用程序由服务运行时,它才无法访问保险库。我还没能解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 2020-01-27
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
相关资源
最近更新 更多