ssl - 来自 KeyVault 的 Kestrel 安全 HTTPS X509 证书

标签 ssl asp.net-core x509certificate2 azure-keyvault kestrel

我想使用我存储在 KeyVault 中的 pfx 证书来保护我的 API,但由于某种原因,这似乎没有按我预期的方式工作。如果我的机器上安装了证书,它就可以完美运行。我想知道是否可以将证书存储在 KeyVault 中,然后以这种方式保护它,而不是在证书存储中查找它。

场景是我有一个与 KeyVault 通信的 .NET Core Web API。此 KeyVault 包含我的 PFX 证书,上传时会提示输入密码。所以此时一切看起来都很好。

我有以下代码来检索和应用证书:

            var client = new KeyVaultClient(new KeyVaultCredential(GetToken));
            var cert = client.GetCertificateAsync("https://somekeyvaultsomewhere.vault.azure.net/", "my_tls_cert").Result;
            var certificate = new X509Certificate2(cert.Cer);

            var host = new WebHostBuilder()
                .UseKestrel(options =>
                {
                    const int PortNumber = 5001;
                    options.Listen(
                        new IPEndPoint(IPAddress.Any, PortNumber),
                        listenOptions =>
                        {
                            listenOptions.KestrelServerOptions.AddServerHeader = false;
                            listenOptions.UseHttps(certificate);
                        });
                })
                .CaptureStartupErrors(true)
                .UseStartup<Startup>()
                .Build();

            host.Run();

我希望能够通过 https 和端口 5001 访问我的 API。相反,我没有得到任何响应(无法访问网站)。

似乎一切都在运行,但无法击中任何东西。

enter image description here

这可以做到吗?

消耗的包:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="2.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions" Version="2.1.3" />
  </ItemGroup>

最佳答案

我认为这是因为您下载的证书不是完整的证书,而只是公钥。缺少私钥将导致 SSL 握手无法完成。您可以下载整个证书作为 secret ,然后将该 secret 转换为 X509Certificate2 对象。我已经在这篇博文中解释过:

https://azidentity.azurewebsites.net/post/2018/07/03/azure-key-vault-certificates-are-secrets

关于ssl - 来自 KeyVault 的 Kestrel 安全 HTTPS X509 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53055234/

相关文章:

asp.net-mvc - RequireHttps 导致 Amazon Elastic Load Balancer 上的重定向循环

amazon-web-services - 为什么我的 AWS cloudfront 可以工作,但不安全?

javascript - 如何选择所有复选框并传递给 Controller

vb.net - 调用带有客户端证书错误的 SOAP Web 服务 - 从服务器收到的身份验证 header 为 ''

python - 使用 TLS 和 Python 进行身份验证

ssl - 从证书对象中获取CERT_RDN信息

c# - 在 ASP.NET Core Web Api 中正确处理 DbContexts

c# - 如何在 AspNetCore.Authentication.Abstractions 上模拟 AuthenticateAsync

c# - SAML 断言/验证如何与 X509 公钥配合使用

c# - 如何使用 HttpWebRequest 实现 SSL?