在 vs2022 .net6 环境开发 webapi ,本机调试没问题,部署到生产环境,浏览器打开提示证书不安全,查了都是要浏览器导入证书 ,有没有什么简单的解决方式?
还有跨域的问题 跨域的代码 和 windows 服务不能同时生效
var optiOns= new WebpplicationOptions { Args = args, COntentRootPath= WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default }; var builder = WebApplication.CreateBuilder(options); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddCors(optiOns=> { options.AddPolicy(name: "myCors", builde => { builde.WithOrigins("*", "*", "*") .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); builder.Host.UseWindowsService(); var app = builder.Build(); app.UseCors("myCors"); app.Run();
直接打开,跨域是可以的,但是作为 windows 服务运行就不生效
![]() | 1 liuhan907 2023-03-11 17:53:47 +08:00 证书你可以选择用 http 测试,或者用 letsencrypt 免费证书。CORS 你是不是用了 IIS 做托管? |
![]() | 2 encro 2023-03-11 18:01:15 +08:00 我都是内部不用证书,外部 nginx 加证书。 |
![]() | 4 ktqFDx9m2Bvfq3y4 2023-03-11 18:14:46 +08:00 跨域建议你使用 ngninx 或网关统一做分流,比如:/api/开头的走 API ,其他走静态网站。或者你放 wwwroot 下就不用做。 |
![]() | 5 rozbo 2023-03-12 12:12:05 +08:00 1. 开发证书的管理 dotnet 提供了一个子命令 `dotnet dev-certs`可以非常方便的导入、导出、信任、删除。 2. 现在 dotnet 跨平台了,所以基本上都 nginx 转到 dotnet 上,跨域本质是个 http 头,不知道你的服务到底指什么,会不会干扰到这个头 3. 一般情况下,产生环境都是使用其他厂家签发的证书,因为常见的浏览器已经内置了这些厂商的根证书,所以直接就是可信的。你使用自己的证书当然不可信,因为浏览器没有内置你的根证书,如果你非得用你自己的证书,那你需要导入它,就像第一条里一样。 4. 一般为了性能考虑,从 nginx 转发到 dotnet 这一段都是在内网环境下的,这一段不需要使用 https ,所以就不需要证书,而对外提供服务的 nginx 则需要,所以本质上你需要在 nginx 上配置证书。 5. 证书有免费的,比如某云就免费一年的,比如 letsencrypt 免费 3 个月但是可以无限续期 |
6 c398425861 OP @liuhan907 没有 IIS ,在客户端电脑上装的,就是程序 exe |