来自 KeyVault 的 Kestrel 安全 HTTPS X509 证书
Kestrel Secure HTTPS X509 Cert from KeyVault
我想用我存储在我的 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。相反,我没有收到任何回复(无法访问网站)。
好像什么都运行但是什么都打不中
这可以吗?
消耗的包数:
<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>
我认为这是因为您下载的证书不是完整的证书,而只是 public 密钥。缺少私钥将阻止 SSL 握手完成。您可以下载整个证书作为秘密,然后将秘密转换为 X509Certificate2 对象。我在这篇博文中解释过 post:
https://azidentity.azurewebsites.net/post/2018/07/03/azure-key-vault-certificates-are-secrets
我想用我存储在我的 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。相反,我没有收到任何回复(无法访问网站)。
好像什么都运行但是什么都打不中
这可以吗?
消耗的包数:
<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>
我认为这是因为您下载的证书不是完整的证书,而只是 public 密钥。缺少私钥将阻止 SSL 握手完成。您可以下载整个证书作为秘密,然后将秘密转换为 X509Certificate2 对象。我在这篇博文中解释过 post:
https://azidentity.azurewebsites.net/post/2018/07/03/azure-key-vault-certificates-are-secrets