Angular调用C# HTTPS服务报ERR_CERT_COMMON_NAME_INVALID问题求助
问题解决步骤
1. 修正Angular API地址格式错误
你的environment.ts里的apiUrl存在格式错误,端口号前多了一个冒号,导致请求URL变为无效格式(https://rejkid.hopto.org/:4000/...)。
修改environment.ts:
export const environment = { production: false, apiUrl: 'https://rejkid.hopto.org:4000' // 去掉多余的冒号 };
2. 为C# ASP.NET Core服务配置正确的HTTPS证书
你误解了C#服务的HTTPS配置逻辑:ASP.NET Core默认使用Kestrel服务器,必须显式配置匹配域名的证书,否则会自动使用开发环境的默认自签名证书,该证书的CN与你的域名rejkid.hopto.org不匹配,导致证书验证失败。
步骤2.1 转换证书格式(如果需要)
Tomcat使用的是JKS格式证书,而Kestrel需要PFX格式(包含私钥)。可以用keytool转换:
keytool -importkeystore -srckeystore [你的Tomcat密钥库路径].jks -destkeystore cert.pfx -deststoretype PKCS12
执行时输入密钥库密码和PFX文件的新密码。
步骤2.2 配置Kestrel使用证书
有两种配置方式:
方式一:通过appsettings.json配置
在appsettings.json中添加Kestrel端点配置:
{ "Kestrel": { "Endpoints": { "Https": { "Url": "https://192.168.0.19:4000", "Certificate": { "Path": "./cert.pfx", // 证书文件路径,可使用绝对路径 "Password": "你的PFX密码" } } } } }
修改CreateHostBuilder,移除硬编码的UseUrls,让程序自动读取配置:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
方式二:通过代码直接配置
直接在CreateHostBuilder中配置Kestrel的HTTPS证书:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .ConfigureKestrel(options => { options.Listen(System.Net.IPAddress.Parse("192.168.0.19"), 4000, listenOptions => { listenOptions.UseHttps("cert.pfx", "你的PFX密码"); }); }); });
3. 验证配置
- 重启Angular开发服务器和C#服务
- 清除浏览器缓存后重新测试API请求,证书错误应消失
内容的提问来源于stack exchange,提问作者Janciu
相关产品推荐
相关产品推荐

