【发布时间】: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<X509Certificate2>().Single()失败) -
解决了!我将服务中的用户 www-data 更改为我的实际用户,现在一切正常。谢谢!
标签: c# azure asp.net-core certificate