use*_*018 6 azure-keyvault azure-web-app-service azure-managed-identity asp.net-core-3.1
我在 azure 密钥保管库中添加了 pfx 证书。
我有一个 asp.net web api 应用程序,我试图通过其中一个端点访问密钥库中的证书信息。
public class ValuesController : ControllerBase
{
public async Task<string> Get()
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync("<certificateSecretIdentifier>").ConfigureAwait(false);
X509Certificate2 certificateWithPrivateKey = new X509Certificate2(Convert.FromBase64String(secret.Value));
return certificateWithPrivateKey.FriendlyName;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Azure 托管标识并且所有配置都正确。
当我在本地 IIS express 中运行 Web 应用程序时,没有错误和端点给我想要的结果。
现在,当我通过 azure 和应用服务应用发布 Web 应用并尝试调用端点时,出现此错误,
我已将我的应用服务应用添加到 azure 密钥保管库的访问策略(获取、列表),请提出可能是什么原因?
2020 年 7 月 8 日 03:20:48.986 +00:00 [错误] Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer:连接 ID“16717361818409901973”,请求 ID“80001f98-0000-e83bf-7b7b7b7b67b7b6应用程序抛出了未处理的异常。Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException:系统找不到指定的文件。在 Internal.Cryptography.Pal.CertificatePal.FilterPFXStore(Byte[] rawData, SafePasswordHandle password, PfxCertStoreFlags pfxCertStoreFlags) 在 Internal.Cryptography.Pal.CertificatePal.FromBlobOrFile(Byte[] rawData, String fileName, SafePasswordHandle password, X509KeySystemFlagStorage) Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data) 在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData) 在网关。
1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT1.ProcessRequestAsync()
Joe*_*Cai 12
读取 PFX 需要加载用户配置文件。当我们添加时WEBSITE_LOAD_CERTIFICATES,它基本上会导致在后台加载配置文件,因此我们可以从文件系统中读取 PFX。
即使您从文件加载证书,Windows 上的 ASP.NET 和 ASP.NET Core 也必须访问证书存储。要在 Windows .NET 应用程序中加载证书文件,请将WEBSITE_LOAD_USER_PROFILE=1选项添加到应用程序的设置中。
更多细节,你可以参考这篇文章。
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |