我知道“KestrelServerOptions”类中有一个接受单个证书的方法“UseHttps”,但是是否可以指定多个 SSL 证书以便能够在单个实例中使用多个域和多个证书红隼?
最佳答案
可以通过在调用 UseHttps() 时设置 ServerCertificateSelector 属性来实现。
选择器是您自己实现的回调,它提供了一个字符串参数,该参数指示客户端用于与您的服务器通信的 DNS 主机是什么。您可以处理此参数并返回相关证书。
取自 Microsoft docs :
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenAnyIP(5005, listenOptions =>
{
listenOptions.UseHttps(httpsOptions =>
{
var localhostCert = CertificateLoader.LoadFromStoreCert(
"localhost", "My", StoreLocation.CurrentUser,
allowInvalid: true);
var exampleCert = CertificateLoader.LoadFromStoreCert(
"example.com", "My", StoreLocation.CurrentUser,
allowInvalid: true);
var subExampleCert = CertificateLoader.LoadFromStoreCert(
"sub.example.com", "My", StoreLocation.CurrentUser,
allowInvalid: true);
var certs = new Dictionary<string, X509Certificate2>(
StringComparer.OrdinalIgnoreCase)
{
["localhost"] = localhostCert,
["example.com"] = exampleCert,
["sub.example.com"] = subExampleCert
};
httpsOptions.ServerCertificateSelector = (connectionContext, name) =>
{
if (name is not null && certs.TryGetValue(name, out var cert))
{
return cert;
}
return exampleCert;
};
});
});
});
关于ssl - 是否可以为 Kestrel 服务器的单个实例指定 2 个不同的 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41261203/