【问题标题】:ASP.NET Core 2 - develop using custom domain names and ssl using IISExpressASP.NET Core 2 - 使用 IISExpress 使用自定义域名和 ssl 进行开发
【发布时间】:2017-10-07 08:47:38
【问题描述】:

我希望能够使用自定义域和 ssl 而不是 localhost 在本地进行开发。

如何在 VS 解决方案中设置自定义域 + ssl 而不是 localhost?

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc asp.net-core-2.0


    【解决方案1】:

    简单设置 - 使用服务器 URL

    如果您想关联您的服务器以使用分配给服务器/网络主机的所有 IP 地址,那么您可以这样做:

    var host = new WebHostBuilder()
        .UseUrls("http://*:80", "http://localhost")
        .UseKestrel()
        .UseIISIntegration()
        .Build();
    

    注意:如果您不想要所有 IP 地址,则可以从 http://* 更改为特定的 IP 地址,例如 http://111.111.111.111。此外,端口不是必需的,但我已经使用它来完成答案。 还需要注意的是,SSL 不适用于 UseUrls

    您可以在 Microsoft 官方文档中找到有关服务器 URL here 的大量其他详细信息。


    绑定 SSL 认证(仅限 Kestrel)--端点配置

    请注意,不建议通过 Kestrel(即使使用 SSL)托管在 public 端点上,您应该使用 Nginx 或 IIS 等反向代理。您可以从official Microsoft Docs here 了解更多信息。

    您没有提到您是否使用 Kestrel,但我假设您是...在这种情况下,您可以通过使用选项绑定套接字轻松配置 SSL 证书。

    下面是使用Listen 方法使用TCP 套接字的示例:

    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }
    
    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseKestrel(options =>
            {
                options.Listen(IPAddress.Loopback, 5000);
                options.Listen(IPAddress.Loopback, 5001, listenOptions =>
                {
                    listenOptions.UseHttps("testCert.pfx", "testPassword");
                });
            })
            .UseIISIntegration() // <-- don't forget you will need this for IIS!
            .Build();
    

    注意:如果您同时使用Listen 方法和UseUrlsListen 端点会覆盖UseUrls 端点。

    您可以在官方 Microsoft Docs 中找到更多信息 here


    配置 IISExpress

    使用图形用户界面
    您可以右键单击该项目,然后单击[Properties]。

    使用 launchSettings.json。
    您必须使用 launchSettings.json 进行配置,您可以在此处找到:

    "iisSettings": {
      "windowsAuthentication": false,
      "anonymousAuthentication": true,
      "iisExpress": {
        "applicationUrl": "http://localhost:61471/",
        "sslPort": 44360
      }
    },
    "profiles": {
      "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "https://localhost:44360",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
    

    配置 IIS 端点

    如果您使用 IIS,则 IIS 的 URL 绑定会覆盖您通过调用 ListenUseUrls 设置的任何绑定。如需更多信息,请参阅Introduction to ASP.NET Core Module

    【讨论】:

    • 哦,没见过,去看看。
    • 托管 Kestrel SSL 用于开发是非常好的。 Kestrel 不应该用作面向互联网的服务器 (IFS),因为这就是上面引用的内容。另请注意,launchSettings.json 不应手动编辑。为此,请使用项目属性-> 调试 UI。编辑 launchsettings.json 可能导致设置不适用于 IISExpress 配置(在 .vs/config/applicationhost.config 文件中)
    • @Tseng - 我不知道不编辑 launchSettings.json 是一个错误吗?无论如何,得到您的意见总是很高兴。
    • 我不会认为这是一个错误。该文件通常由该 UI 创建,它使 IIS 设置与.vs/config/applicationhost.config 保持同步。仅更改 launchsettings.json 中的端口(至少在过去)导致仅更改了启动 url,但应用程序仍在旧端口上运行,因为 applicationhost.config 未更新。通过 UI 执行此操作会在过去更新这两个文件。
    • 超级重要:您在 IISExpress 中的 SSL 端口必须在 44300-44399 范围内。您的原始答案显示 443 用于 sslPort,但您的图像显示端口为 44360。奇怪的是,据我所知,您无法在属性页面中编辑此端口。无论如何,我编辑了您的答案以匹配您在 launchsettings.json 中图像中的端口(从 443 -> 44360)
    【解决方案2】:

    对于 .net 核心,设置自定义域:

    1. 将域添加到主机文件,例如www.yourapp.local

    2. 找到解决方案 /.vs/applicationhost.config 添加绑定例如:

    3. 在 web 项目属性 > 调试中将 App Url 添加到“http://www.yourapp.local:51791/”

    (根据需要替换端口号)

    对于 SSL,我假设您可以将上述绑定和设置设置为 https,并在 Web 应用程序属性 > 调试中勾选“启用 SSL”复选框。

    也看到这个答案:How to enable SSL for IIS Express in VS2015

    【讨论】:

      【解决方案3】:

      如果您对浏览器(或您使用的任何客户端)中的证书验证错误感到满意,您可以在 hosts 文件中添加一个条目:

      www.yourcustomdomain.com 127.0.0.1(或::1,如果您使用的是 IPv6)

      然后使用自定义域在本地访问您的网站。

      在 Windows 中,hosts 文件通常位于 C:\Windows\System32\drivers\etc

      【讨论】:

        【解决方案4】:

        首先,在客户端的C:\Windows\System32\drivers\etc\hosts 文本文件中添加一个条目。按照hosts 文件本身中的说明进行操作。

        “本地开发”是指在本地机器上还是本地网络上?如果是后者,您必须完成以下任务(按任意顺序)。

        • 在服务器上按照here 的描述生成并按照here 的描述配置证书,并将其安装在客户端上。
        • 配置防火墙以允许访问您的 Web API,如 here 所述。
        • 将您的 Web API 绑定到非localhost URL,如herehere 所述。

        我不确定,但要让它与 IIS Express 一起使用,您可能还需要运行 netsh http add urlacl,如 herehere 所述。

        上面的一些链接是特定于 IIS Express 的,因为这是您所询问的。如果使用 Kestrel,则将上述任务更改如下。

        要在服务器上配置您的证书,请将其添加到appsettings.json

        "Kestrel": {
            "Certificates": {
                "Default": {
                    "Subject": "api.mycustomdomain.com",
                    "Store": "My",
                    "AllowInvalid": true
                }
            }
        }
        

        要将您的 Web API 绑定到非localhost URL,在launchSettings.json 的Kestrel 配置文件中,将applicationUrl 值的localhost 部分替换为0.0.0.0

        【讨论】:

          猜你喜欢
          • 2020-05-25
          • 2019-01-20
          • 1970-01-01
          • 2013-10-25
          • 1970-01-01
          • 1970-01-01
          • 2019-02-18
          • 2016-03-27
          • 2018-04-04
          相关资源
          最近更新 更多