ASP.NET Core 6自托管应用HTTPS端点非安全问题求助
解决ASP.NET Core 6自托管应用局域网访问“NOT SECURE”问题
问题根源
开发环境下localhost使用的是ASP.NET Core自动生成的开发证书,该证书仅对localhost域名有效。当切换到局域网IP(如172.24.242.181)访问时,证书的域名/IP与访问地址不匹配,加上自签名证书未被客户端信任,导致浏览器提示“NOT SECURE”。
解决方案步骤
1. 生成适配局域网IP的自签名证书
使用PowerShell生成包含局域网IP和localhost的自签名证书,确保证书覆盖所有需要的访问地址:
New-SelfSignedCertificate -DnsName "172.24.242.181", "localhost" -CertStoreLocation "Cert:\LocalMachine\My" -KeyUsage DigitalSignature, KeyEncipherment -Type SSLServerAuthentication
- 参数说明:
-DnsName:指定证书生效的地址,同时包含局域网IP和localhost,适配两种访问场景-CertStoreLocation:将证书存储到本地机器的证书库,方便服务进程访问-Type:指定证书类型为SSL服务器认证,符合HTTPS要求
2. 信任自签名证书
自签名证书默认不被系统信任,需将其导入到受信任的根证书颁发机构:
- 按下
Win+R输入mmc打开控制台 - 点击「文件」→「添加/删除管理单元」,选择「证书」→「本地计算机」,完成添加
- 展开「证书(本地计算机)」→「个人」→「证书」,找到刚才生成的证书(主题为
172.24.242.181) - 右键证书→「所有任务」→「复制」,然后粘贴到「证书(本地计算机)」→「受信任的根证书颁发机构」→「证书」目录下
3. 配置ASP.NET Core应用使用证书
修改Program.cs,让Kestrel加载刚才生成的证书:
首先获取证书的指纹:在MMC中打开证书属性→「详细信息」→「指纹」,复制值并去掉中间的空格。
方式1:代码直接配置
var builder = WebApplication.CreateBuilder(args); // 添加控制器服务 builder.Services.AddControllers(); // 配置Kestrel绑定所有IP并使用指定证书 builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(8080, listenOptions => { listenOptions.UseHttps(httpsOptions => { // 从本地机器证书库加载证书 var cert = new X509Certificate2( storeName: StoreName.My, storeLocation: StoreLocation.LocalMachine, subjectNameOrThumbprint: "替换为你的证书指纹(无空格)", keyStorageFlags: X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet); httpsOptions.ServerCertificate = cert; }); }); }); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
方式2:通过配置文件(更灵活)
在appsettings.json中添加Kestrel配置:
"Kestrel": { "Endpoints": { "Https": { "Url": "https://0.0.0.0:8080", "Certificate": { "Thumbprint": "替换为你的证书指纹(无空格)", "Store": "My", "Location": "LocalMachine" } } } }
此时Program.cs无需额外配置Kestrel,框架会自动读取配置。
4. 客户端信任证书
局域网内的所有客户端电脑(包括WPF客户端所在机器)都需要导入该证书到受信任的根证书颁发机构,步骤与服务器端一致:
- 在服务器上导出证书:右键证书→「所有任务」→「导出」,选择导出为
.cer格式 - 将
.cer文件复制到客户端,双击运行并按照向导导入到「本地计算机」的「受信任的根证书颁发机构」
5. 验证配置
重启ASP.NET Core应用,使用客户端浏览器访问https://172.24.242.181:8080,此时浏览器应不再提示“NOT SECURE”,WPF客户端调用接口也不会出现证书验证错误。
内容的提问来源于stack exchange,提问作者Vitor Barros
相关产品推荐
相关产品推荐

