【问题标题】:Visual Studio 2017 Enable SSLVisual Studio 2017 启用 SSL
【发布时间】:2017-04-25 19:42:26
【问题描述】:

如何在 Visual Studio 2017 中为项目启用 SSL?

在 VS15 中,我可以选择项目 -> 属性 -> 调试 -> 启用 SSL。此选项在 VS2017 中不可用。搬到哪里去了?

编辑:

我什至尝试编辑 .\vs\config\applicationhost.config 无济于事:

        <listenerAdapters>
            <add name="http" />
            <add name="https" />
        </listenerAdapters>

        <sites>
            <site name="WebSite1" id="1" serverAutoStart="true">
                <application path="/">
                    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation=":8080:localhost" />
                </bindings>
            </site>
            <site name="Filters" id="2">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="c:\Users\Ashley\documents\visual studio 2017\Projects\Filters\src\Filters" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:51107:localhost" />
                    <binding protocol="https" bindingInformation="*:43107:localhost" />
                </bindings>
            </site>
            <siteDefaults>
                <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
                <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
            </siteDefaults>
            <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
            <virtualDirectoryDefaults allowSubDirConfig="true" />
        </sites>

        <webLimits />

编辑:

我尝试过的另一个选项是配置 Kestrel 以使用 HTTPS,但感觉很笨重,并且有点违背 IDE 的意义。这并不理想,因为我必须从 IIS 导出 localhost 的证书副本,而 IIS Express 仍然尝试在不同的端口上加载站点。

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel(options =>
                options.UseHttps(new X509Certificate2("path/to/cert.pfx", "password")))
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseUrls("http://localhost:5100", "https://localhost:4300")
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

遗憾的是,这在从 VS17 运行时不起作用。我第一次遇到 502.2(我认为)错误,现在我得到的只是 Chrome 中的无法连接错误。我可以在 PowerShell 中运行 dotnet run,它运行良好。

作为一种解决方法,它可以解决问题。但它看起来并不整洁。

【问题讨论】:

标签: ssl https kestrel-http-server visual-studio-2017


【解决方案1】:

端口在 IIS Express 中被锁定,因此它不必以管理员身份运行...

有效端口为 44300 - 44399

查看开发社区文章 https://developercommunity.visualstudio.com/content/problem/39430/changing-port-number-in-a-web-project-does-not-imm.html

您可以编辑launchSettings.json,但ssl端口必须在此范围内。

【讨论】:

  • 这是正确的答案。我选择了一个不在该范围内的随机端口,但它不起作用。在该范围内获得一个 - 它有效!感谢您的帮助。
  • 同意,如果您设置为首先使用 http,VS 不会为您更改端口号。更改项目 URL 值以包含 44300 以上的端口对我有用。 --> localhost:44301
  • 在网上搜索了半天找到了你的答案,谢谢!这解决了我的问题!
  • 是的,@ashley-bye 应该将此标记为答案,以便对其他人也有帮助
  • 这是一个糟糕的答案。它没有解释如何实际设置端口号,只是它必须在一个范围内。大多数“内容”来自链接,使其成为仅链接的答案,但该链接也不回答问题。
【解决方案2】:

这是针对 Asp.Net MVC .Net Framework 项目的

  1. 突出显示您的项目
  2. 然后按 F4 打开其属性窗格。
  3. 在列表中找到 SSL Enabled 项并将其值设置为 True,然后 将 SSL URL 值复制到剪贴板。
  4. 当您的 Project 突出显示时,按 Alt + Enter 打开 属性对话框 - 将复制的 SSL URL 粘贴到项目 url Web 菜单输入框下。

【讨论】:

  • 我想补充一点,如果该选项似乎灰显,很可能是因为 iis 进程仍在运行(即使在您从 VS 停止调试会话之后) .只需在任务管理器中终止该进程,它就会让您更改值。
  • 这是唯一对我有用的解决方案!谢谢!
  • 这不是解决方案。在 VS2017 中,属性菜单没有 Web 菜单输入框,所以你显然不能在那里输入任何内容。
  • “无法访问此站点” - 太棒了
【解决方案3】:

对于 Visual Studio 2019 和 2017:

  1. 在解决方案资源管理器中,右键单击项目 > 属性
  2. 选择调试选项卡
  3. 勾选启用 SSL

【讨论】:

  • ASP.NET Core (1.1) 项目中不存在此类选项,在 Web 服务器设置下,唯一可用的选项是 AppURL 文本框
  • @Serge 存在于 ASP.NET Core 2.0
  • 在该范围内创建一个随机端口号。
  • 这似乎在 Visual Studio 2019 中消失了
  • VS 2017(.NET 4.7.2 MVC web 项目)没有“调试”选项卡
【解决方案4】:

在解决方案资源管理器中,右键单击您的网站名称并选择“属性窗口”,或者直接按 F4。在 Developer Web Server 部分下,将 SSL Enabled 从 False 更改为 True。

【讨论】:

    【解决方案5】:

    对于在 Visual Studio 2017 RC 中运行 asp.net core 1.x 的用户,您应该能够将 launchSettings.json 文件中的“sslPort”:0 行更改为您希望用于 SSL 的任何端口号。这有效地更改了前面答案中提到的 .\vs\config\applicationhost.config 文件中的绑定。

    【讨论】:

      【解决方案6】:

      这是针对 Asp.Net Core 2.0 的:

      1. 在 VS2017 中打开您的解决方案资源管理器。
      2. 双击Properties(是的,它本身也是一个对象,而不仅仅是一个文件夹)
      3. 在左侧打开Debug
      4. 向下滚动并选择Enable SSL

      如果已经启用,请打开launchSettings.json(展开Properties)并将"sslPort"设置为0,然后再执行这些步骤。

      VS2017 现在应该询问您是否要添加 SSL 证书(如果您自己更改了 launchSettings.json,它不会这样做),它会为您设置一个端口。

      【讨论】:

        【解决方案7】:

        编辑.\vs\config\applicationhost.config 实际上对我有用。

        <site name="Filters" id="2">
          <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="c:\Users\Ashley\documents\visual studio 2017\Projects\Filters\src\Filters" />
          </application>
          <bindings>
            <binding protocol="http" bindingInformation="*:51107:localhost" />
            **<binding protocol="https" bindingInformation="*:43107:localhost" />**
          </bindings>
        </site>
        

        但默认情况下,它确实使用非 https 端口在浏览器中加载应用程序。如果您手动将浏览器指向 43107 端口,它应该可以工作。

        编辑

        这对我有用几次,但停止工作。随后的测试表明,每当我在 VS 2017 RC 中单击按钮开始调试时,它都会删除我手动添加的绑定。

        我通过将文件设置为只读来解决这个问题,现在它又开始支持 HTTPS。

        【讨论】:

        • 仍然有点“hacky”的解决方法,但我会尝试将文件设为只读以防止覆盖配置选项。至少我应该能够再次在 VS 中运行所有内容。
        • 如果您想避免“hacky”解决方法,那么: 1. 在解决方案资源管理器中打开应用程序的属性。 2. 选择调试。 3. 启用 SSL。
        • @Allan 您应该将其添加为答案,以便我接受。在撰写此问题时,Microsoft 尚未实施该选项,但今后它似乎是最佳选择。
        • 不幸的是,“启用 SSL”不起作用。这个hack是唯一对我有用的东西。它曾经可以工作,但自这篇文章发布(2018 年 8 月)以来,VS2017 的“升级”再次打破了这一点。
        【解决方案8】:

        不幸的是,我遇到了同样的问题,在项目属性的“调试”选项卡中看不到“启用 SSL”复选框... 终于找到了! --> 在“IIS Express”上设置启动,然后你就可以选择它了;-)

        【讨论】:

          【解决方案9】:

          您可能遗漏的重要一点是您必须以管理员身份运行 Visual Studio(右键单击 VS 图标并选择“以管理员身份运行”。 我一直在努力解决这个 SSL 问题,在以管理员身份运行 VS 之后,我让它工作了。

          【讨论】:

            【解决方案10】:

            如果您在项目的“属性”窗口下看到启用 SSL 选项,但它是灰色的

            1. 关闭 Visual Studio
            2. 编辑 vwd.webinfo 文件并将 sslPort="44317" 属性添加到 iisExpressSettings 元素。
            3. 或者,您可以删除 vwd.webinfo 文件,Visual Studio 会在您打开项目时创建一个新文件

            【讨论】: