在.NET Core 3.1中,ASPNETCORE_Kestrel__Certificates__Default__Path 属性的行为发生了变化。在之前的版本中,如果没有设置此属性,则 Kestrel 将使用当前目录中的 cert.pfx 文件作为默认证书。但是,在.NET Core 3.1中,如果未找到您指定的默认路径或默认证书,则 Kestrel 将不再使用当前目录中的 cert.pfx 文件作为默认证书。
为了解决这一问题,您可以使用以下代码将默认证书的路径设为当前目录中的 cert.pfx 文件:
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel(options => {
options.ConfigureHttpsDefaults(httpsOptions => {
httpsOptions.ServerCertificateSelector = (context, name) => {
// use the cert.pfx file in the current directory
var certPath = Path.Combine(Directory.GetCurrentDirectory(), "cert.pfx");
return new X509Certificate2(certPath, "password");
};
});
})
.UseStartup()
.Build();
host.Run();
}
在此示例中,我们使用 options.ConfigureHttpsDefaults()
方法配置了 Kestrel 的 HTTPS 默认选项,并将证书选择委托指定为返回位于当前目录中的 cert.pfx 文件的 X509Certificate2 对象。
相比将路径硬编码在代码中,您也可以将路径作为应用程序配置的一部分,以便更轻松地进行更改:
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel(options => {
options.ConfigureHttpsDefaults(httpsOptions => {
httpsOptions.ServerCertificateSelector = (context, name) => {
// use the cert.pfx file in the configured directory
var certPath = Path.Combine(Configuration["CertificateDirectory"], "cert.pfx");
return new X509Certificate2(certPath, "password");