树莓派上.NET 6 API被Blazor WASM调用时出现ERR_CERT_AUTHORITY_INVALID错误
解决Blazor WASM调用.NET 6 API的证书验证错误问题
问题原因
ERR_CERT_AUTHORITY_INVALID错误是因为你的API使用的SSL证书未被浏览器信任。浏览器直接访问时你可能手动确认了"继续访问",但Blazor WASM的HttpClient基于浏览器的Fetch API,会严格执行证书验证,不会自动跳过未信任的证书。
解决方案
1. 开发环境临时方案(不推荐生产使用)
方案A:API改用HTTP协议
修改API的Program.cs,移除HTTPS配置,或者在launchSettings.json里设置HTTP端口,然后Blazor WASM的HttpClient改用HTTP地址调用。
// Program.cs 示例:仅启用HTTP builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(5001); // HTTP端口 });
方案B:让浏览器信任自签证书
- 导出API使用的自签证书(如果是用
dotnet dev-certs生成的,路径一般在~/.aspnet/https/或%APPDATA%\ASP.NET\Https\) - 双击证书,在系统证书管理器中将其安装到受信任的根证书颁发机构(Windows),或在macOS钥匙串中设置为"始终信任"
- 重启浏览器后,Blazor WASM的HttpClient就能正常调用API了
2. 生产环境正式方案
方案A:使用Let's Encrypt免费可信证书(公网可访问的API)
- 在树莓派上安装Certbot:
sudo apt-get update sudo apt-get install certbot
- 生成证书(需域名指向你的树莓派IP):
sudo certbot certonly --standalone -d your-domain.com
- 配置.NET 6 API的Kestrel使用该证书:
在appsettings.json中添加:
"Kestrel": { "Endpoints": { "Https": { "Url": "https://0.0.0.0:7001", "Certificate": { "Path": "/etc/letsencrypt/live/your-domain.com/fullchain.pem", "KeyPath": "/etc/letsencrypt/live/your-domain.com/privkey.pem" } } } }
方案B:使用自定义CA签发的证书(内网环境)
- 生成自定义根CA证书(用OpenSSL):
# 生成根CA私钥 openssl genrsa -out rootCA.key 2048 # 生成根CA证书 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem
- 用根CA签发API的服务器证书:
# 生成服务器私钥 openssl genrsa -out api-server.key 2048 # 生成证书签名请求(CSR) openssl req -new -key api-server.key -out api-server.csr # 用根CA签发证书 openssl x509 -req -in api-server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out api-server.crt -days 365 -sha256
- 配置API使用该证书(同上面的Kestrel配置,替换证书路径)
- 将根CA证书
rootCA.pem安装到所有客户端设备的受信任根证书目录,确保浏览器信任该CA
独立部署API的额外配置
- 确保API开启了CORS,允许Blazor WASM所在域名的请求:
在Program.cs中添加:
builder.Services.AddCors(options => { options.AddPolicy("AllowBlazorApp", policy => { policy.WithOrigins("https://your-blazor-app-domain.com") // 替换为你的Blazor应用地址 .AllowAnyHeader() .AllowAnyMethod(); }); }); app.UseCors("AllowBlazorApp");
- 检查Kestrel的端口是否对外开放,树莓派的防火墙是否允许7001端口的HTTPS流量
内容的提问来源于stack exchange,提问作者Christoph1972
相关产品推荐
相关产品推荐

