V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
c398425861
V2EX  ›  .NET

.net 6 webapi 控制台程序 https 证书问题 跨域问题

  •  
  •   c398425861 · 2023-03-11 17:33:53 +08:00 · 1803 次点击
    这是一个创建于 660 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 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 服务运行就不生效

    6 条回复    2023-03-21 18:22:26 +08:00
    liuhan907
        1
    liuhan907  
       2023-03-11 17:53:47 +08:00
    证书你可以选择用 http 测试,或者用 letsencrypt 免费证书。CORS 你是不是用了 IIS 做托管?
    encro
        2
    encro  
       2023-03-11 18:01:15 +08:00
    我都是内部不用证书,外部 nginx 加证书。
    liuhan907
        3
    liuhan907  
       2023-03-11 18:09:29 +08:00
    @encro 我们也是。内部 http ,外部用 k8s ingress 统一套一层 https 。
    Chad0000
        4
    Chad0000  
       2023-03-11 18:14:46 +08:00
    跨域建议你使用 ngninx 或网关统一做分流,比如:/api/开头的走 API ,其他走静态网站。或者你放 wwwroot 下就不用做。
    rozbo
        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 个月但是可以无限续期
    c398425861
        6
    c398425861  
    OP
       2023-03-21 18:22:26 +08:00
    @liuhan907 没有 IIS ,在客户端电脑上装的,就是程序 exe
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:53 · PVG 03:53 · LAX 11:53 · JFK 14:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.