ASP.NET Core 9配置自定义HTTPS证书后--urls参数失效,自动绑定到https://[::]:443的问题排查
ASP.NET Core 9配置自定义HTTPS证书后--urls参数失效,自动绑定到https://[::]:443的问题排查
问题描述
我最近在ASP.NET Core 9项目里配置自定义HTTPS证书时遇到了个棘手的问题:明明通过--urls参数指定了服务要监听的地址https://my-service.local,但应用启动后却自动绑定到了https://[::]:443,完全忽略了我设置的URL。
我的HTTPS配置代码片段如下:
var certFilePath = "cert.pem"; var keyFilePath = "key.pem"; var httpsCert = X509Certificate2.CreateFromPemFile(certFilePath, keyFilePath); builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.ConfigureHttpsDefaults(options => { options.ServerCertificate = httpsCert; }); });
完整的Program.cs代码是这样的:
using System.Security.Cryptography.X509Certificates; var builder = WebApplication.CreateBuilder(args); builder.Services.AddMvc(); var certFilePath = "cert.pem"; var keyFilePath = "key.pem"; var httpsCert = X509Certificate2.CreateFromPemFile(certFilePath, keyFilePath); builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.ConfigureHttpsDefaults(options => { options.ServerCertificate = httpsCert; }); }); var app = builder.Build(); app.UseRouting(); app.MapControllers(); app.UseStaticFiles(); app.Run();
启动命令我用的是:
MyService.exe --urls=https://my-service.local
结果日志里显示的监听地址完全不是我指定的:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://[::]:443
我本来只想让服务在本地主机地址范围内可用,这情况完全不符合预期。
问题原因与解决方案
折腾了好一阵终于搞明白问题所在:当使用自定义HTTPS证书时,--urls参数里不能直接用hosts文件中配置的域名,必须指定具体的IP地址。
比如把启动命令改成下面这样就正常了:
MyService.exe --urls=https://127.0.0.1:443
如果想监听所有本地IP,也可以用:
MyService.exe --urls=https://localhost:443
这样配置后,应用就会乖乖监听指定的地址,不会再自动跳到https://[::]:443了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

