gpt4 book ai didi

https - 在 Windows 网络服务器上使用公共(public)证书运行/配置自托管控制台应用程序(ASP.net 核心 2.1、Kestrel)时出现问题

转载 作者:行者123 更新时间:2023-12-03 19:45:47 28 4
gpt4 key购买 nike

过去,我使用 https 开发了各种 web 服务(VB ASP.net web-api 应用程序)用于生产。
我已经使用 http 完成了开发,然后在生产服务器上设置了 https。
要在生产服务器上为 https 和证书设置端口,我有:

  • 在证书存储区中导入了公共(public)证书
    windows 服务器使用 netsh 为 https 配置了一个特定的端口。
    例如:

  • netsh http add urlacl url=https://+:22224/ user=everyone


  • 将证书(通过指纹)绑定(bind)到端口。例如:

  • netsh http add sslcert ipport=0.0.0.0:22224 certhash=31cf73308a768100d4d32fe6e77638593e68ab57 appid={a33a711f-c587-44e5-96bc-dca8a7f3fc3c}


  • 设置应用程序以监听特定端口,我有
    在启动时从配置文件中读取 url - 例如https://IP:Port并应用
    它到 (vb.net) HttpSelfHostConfiguration()

  • 这可以正常工作,并且我可以根据需要配置应用程序(例如,在配置文件中为 http 配置一个端口以在 Intranet 服务器上进行测试,在配置文件中为使用 https 的生产环境配置另一个端口)。

    现在,我想对 做同样的事情asp.net 核心 2.1.6 申请和 它似乎不是以同样的方式工作。
    公共(public)证书 (comodo) 安装在 Windows Web 服务器的证书存储中。
    端口 22224 配置了用于 https 的 netsh。
    证书使用 netsh 绑定(bind)到端口(使用 netsh http show sslcert ipport=0.0.0.0:22224 显示证书正确
    程序.cs ,我添加端口以使用 UseUrls 进行监听:
     public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>() //;
    .UseUrls(GV.cURL, "http://localhost:5000");
    }

    其中 GV.curl 包含 https://IP:22224在运行时

    如果我将其配置为 ,应用程序运行良好(通过 Internet) http -端口(例如 http://IP:22222 )。
    如果我设置(配置的)https 端口( https://IP:22224),应用程序不会启动并给出错误消息:
    无法配置 HTTPS 端点。未指定服务器证书,并且找不到默认的开发人员证书。

    我在网上发现的信息令人困惑,似乎这个主题是一个“移动目标”(asp.net core x-x 的基本处理经常发生变化)。
    我现在的发现:
    剪掉的“ 未指定服务器证书 ”在错误消息中表示证书 必须在应用程序中配置?

    我找到了 一个例子使用 .useKestrel 选项在 CreateWebHostBuilder 中指定证书:
    .UseKestrel(options =>
    {
    options.Listen(IPAddress.Loopback, 5000);
    options.Listen(IPAddress.Loopback, 5001, listenOptions =>
    {
    listenOptions.UseHttps("certificate.pfx", "topsecret");
    });

    注意:就我而言,我必须将 5001 更改为 22224。

    问题:
  • 我真的必须配置(已经绑定(bind)到端口)公共(public)
    证书也在 asp.net core 2.1 应用程序中?
  • 如果是,最好的方法是什么(上面的例子是一个好方法)?
  • 最佳答案

    经过大量的尝试和错误,我找到了适合我的相关信息。
    注意:我与 合作ASP.net 核心 2.1.6 现在(如果您使用旧版本,这可能不适合您...

    不需要使用 netsh 进行任何配置,但您必须配置证书(包括密码)。
    您进一步不需要更改program.cs ...
    配置完全可以在 中完成appsettings.json(包含在项目根目录中)
    所以......在项目中(在我的机器上调试),我使用默认的 appsettings.json(使用 http):

    {
    "Logging": {
    "LogLevel": {
    "Default": "Warning"
    }
    },
    "AllowedHosts": "*"
    }

    内网服务器,我使用另一个 appsettings.json(仍然使用 http):
    {
    "Logging": {
    "LogLevel": {
    "Default": "Warning"
    }
    },
    "AllowedHosts": "*"
    ,
    "Kestrel": {
    "EndPoints": {
    "Http1": { "Url": "http://localhost:5000" },
    "Http2": { "Url": "http://172.16.1.120:22222" }
    }
    }
    }

    这样,应用程序可以在局域网中通过内网服务器的 IP 地址进行测试,也可以直接在内网服务器(localhost 端口 5000)上进行测试。

    互联网 服务器,我使用另一个 appsettings.json(对于带有 http 的 localhost, 对于带有 https 和证书的服务器 IP ):
    {
    "Logging": {
    "LogLevel": {
    "Default": "Warning"
    }
    },
    "AllowedHosts": "*"
    ,
    "Kestrel": {
    "EndPoints": {
    "Http": {
    "Url": "http://localhost:5000"
    },
    "HttpsInlineCertFile": {
    "Url": "https://192.168.3.3:22224",
    "Certificate": {
    "Path": "./certificate.pfx",
    "Password": "NotReally",
    "AllowInvalid": "true"
    }
    }
    }
    }
    }

    这样,应用程序可以直接在内网服务器上使用 http 进行测试,并在 Internet 上使用 https 和 cert 进行测试。

    处理:
  • 在服务器上,我有一个应用程序的根目录。
  • 直接在根目录下,我存储了“每台机器”不同文件的副本(包括 appsettings.json)
  • 为了发布新版本,我在我的开发机器上发布,然后将\publish\目录复制到服务器(在根目录下)并覆盖存储的文件。
  • 为了获得正确的配置,我创建了一个简单的 .cmd ,从根目录中复制(特定于服务器的)配置文件,我在新发布后运行的子目录\publish\...

  • https 和证书的注释:
  • 证书必须存储在\publish\文件夹中。
  • 由于(我的)公共(public) contoso 证书确实保护了几个域,因此 https 仅在通过域调用应用程序时才能正常工作(否则,会显示好消息“不安全”消息)。
  • 为了能够使用 https 测试应用程序,我在 windows 上打开了端口 22224 和“真正的”防火墙。
  • DNS 指向我们互联网服务器的公共(public) IP。
    为了测试,我用 https://www.Domain.xx:22224 调用应用程序

  • 而且......它工作......

    关于https - 在 Windows 网络服务器上使用公共(public)证书运行/配置自托管控制台应用程序(ASP.net 核心 2.1、Kestrel)时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53430278/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com