在 vs2022 .net6 环境开发 webapi ,本机调试没问题,部署到生产环境,浏览器打开提示证书不安全,查了都是要浏览器导入证书 ,有没有什么简单的解决方式?
还有跨域的问题 跨域的代码 和 windows 服务不能同时生效
var options = new WebApplicationOptions
{
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
Chad0000 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
|