165

我第一次使用带有 IISExpress 的新 Visual Studio 2013(以前在 VS2010 上使用 ASP.net 开发服务器)。我在尝试调试我的项目时遇到了问题。

这是我在 Chrome 中看到的:

无法与服务器建立安全连接。这可能是服务器的问题,或者可能需要您没有的客户端身份验证证书。错误代码:ERR_SSL_PROTOCOL_ERROR

我更新了我的属性 -> Web 文件,以便项目 URL 现在使用 https URL。但是,在这样做之后,我现在在启动时遇到了一个新错误:

与 localhost 的连接被中断。错误代码:ERR_CONNECTION_RESET

谢谢

4

26 回答 26

443

我收到 ERR_CONNECTION_RESET 因为我的 Visual Studio 2013/IIS Express 配置的应用程序端口号不在 :44300-:44398范围内。(我不记得必须解除任何警告才能超出该范围。)将端口号更改为该范围内的值是我必须做的所有事情才能使其工作。

netsh http show sslcert > sslcert.txt在查看输出并点击我最近阅读的有关端口号的内容后,我注意到了这一点。

于 2014-07-25T13:41:12.637 回答
107

确保删除任何以前的“本地主机”证书,因为这些证书可能与 IIS Express 生成的证书冲突。我遇到了同样的错误(ERR_SSL_PROTOCOL_ERROR),在尝试了许多“解决方案”之后,我花了很多时间才最终弄清楚。我的错误是我创建了自己的“本地主机”证书,其中有两个。我不得不删除两者并让 IIS Express 重新创建它。

以下是检查和删除“localhost”证书的方法:

  • 在开始时,键入 → mmc.exe
  • 文件 → 添加/删除管理单元...
  • 选择证书→添加>→计算机帐户→本地计算机
  • 检查证书 > 个人 > 证书
  • 确保存在的 localhost 证书具有友好名称“IIS Express 开发证书”。如果没有,请删除它。或者如果有多个,则全部删除。

在 Visual Studio 上,选择项目并在属性选项卡下,启用 SSL=true。保存、构建和运行。IIS Express 将生成一个新的“localhost”证书。

注意:如果它不起作用,请尝试以下操作:确保在 VS 项目上禁用 IIS Express 并在删除“localhost”证书之前停止其上所有正在运行的应用程序。此外,您可以转到“控制面板 > 程序”并修复 IIS Express。

于 2014-04-02T17:33:58.347 回答
51

如果您在 web.config 中使用 URLRewrite 来强制 SSL 连接,它可能会重写您的 localhost 地址以强制使用 https。如果启用 SSL 的调试对您来说并不重要并且您正在使用 URLRewrite,请考虑将其添加<add input="{HTTP_HOST}" pattern="localhost" negate="true" />到您的 web.config 文件的 rewrite 部分。它将停止对任何 localhost 地址的重写,但将其保留在生产环境中。如果您不使用 URLRewrite 或需要使用 SSL 进行调试,http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx可能会有所帮助。它适用于 VS2010,但也适用于 VS2013。

于 2013-11-12T20:34:07.270 回答
47

我正在总结帮助我解决此问题的步骤:

  1. 确保 SSL 端口范围(由 IIS express 使用)在 44300-44398 之间

在安装过程中,IIS Express 使用 Http.sys 保留端口 44300 到 44399 以供 SSL 使用。这使 IISExpress 的标准用户(没有提升的权限)能够配置和使用 SSL。有关这方面的更多详细信息,请参阅此处

  1. 在命令提示符下以管理员身份运行以下命令。这将在计算机中输出 SSL 证书绑定。从此列表中,找出 IIS express 用于相应端口的证书:

netsh http 显示 sslcert > sslcert.txt

  1. 在 sslcert.txt 中查找以下项目(在我的情况下,IIS express 在端口 44300 上运行)

IP:端口 :0.0.0.0:44300

证书哈希 :eb380ba6bd10fb4f597cXXXXXXXXXX

应用程序 ID :{214124cd-d05b-4309-XXX-XXXXXXX}

  1. 还要查看 IIS express 管理控制台(RUN (Ctrl+R) -> inetmgr.exe),查看对应的证书是否存在于 Server Certificates 中

(单击 ServerRoot -> 在 IIS () 部分下 -> 打开服务器证书)

  1. 如果您的本地主机默认使用与步骤 3 中列出的证书不同的证书,请继续执行以下步骤

netsh http 删除 sslcert ipport=0.0.0.0:44300

netsh http 添加 sslcert ipport=0.0.0.0:44300 certash= New_Certificate_Hash_without_space appid= {214124cd-d05b-4309-XXX-XXXXXXX}

New_Certificate_Hash 将是您的默认证书,与您的本地主机(我们在步骤 4 中找到)或您要添加为新证书的证书绑定。

PS感谢您的回答uosɐſ(帮助我解决了这个问题)

于 2015-11-17T03:21:13.940 回答
32

我遇到的问题与我有关,在某个时间点,为 localhost 启用 HSTS 并且没有意识到这会破坏我在 IIS Express 中的http://localhost:someport 。

HSTS 告诉浏览器(在我的例子中是 Chrome)总是使用 HTTPS 请求 URL。因此,即使我什至没有为我的 MVC 5 应用程序启用 SSL,浏览器仍然会尝试使用 URL 中的 HTTPS 而不是 HTTP 来访问我的站点。

修复?

  1. 浏览到 chrome://net-internals/#hsts
  2. 在删除部分,输入“localhost”并从 Chrome 中删除记录。
于 2015-06-13T10:24:54.757 回答
13

以上选项都不适合我。我必须执行以下操作:

  1. 卸载 IIS Express 8.0
  2. 为 IIS Express 删除了我的 Documents 目录中的所有配置
  3. 重新安装 IIS Express 8.0
  4. 删除了我本地机器上的项目并下载了 TFS 的干净版本
  5. 运行项目 - 然后它通过 SSL 运行,我能够调试

我从这个线程中得到了步骤。

希望这可以帮助。

于 2015-04-01T19:33:09.093 回答
9

我遇到的问题与@Jason Kleban 的回答有关,但我在 IIS Express 的 Visual Studio 属性中的设置有一个小问题。

确保将端口更改为范围:44300 到 44399 后,地址也以HTTPS

在此处输入图像描述

于 2020-03-18T12:43:05.377 回答
6

就我而言,我创建了一个自签名证书并让它工作,除了我在浏览器中收到错误,因为证书不受信任。因此,我将证书移动到“证书”管理单元中的“受信任的根证书颁发机构”>“证书”文件夹中。它奏效了,然后我当天关闭了 Visual Studio。

第二天,我开始了我的项目,我收到了原始问题中提到的错误。问题是您配置 IISExpress 的证书必须存在于 Personal > Certificates 文件夹中,否则 HTTPS 将停止工作。IIS Express 成功启动后,您可以将证书拖回受信任的位置。它会继续工作,直到您重新启动 IIS Express。

不想每次都来回拖动证书大惊小怪,我只是在两个地方都放了一份证书副本,现在一切正常。

于 2016-05-07T08:04:47.757 回答
6

我在 Visual Studio 2015 中遇到了同样的问题。因为我在 web.config 中使用 SSL 绑定

<rewrite>
   <rules>   
     <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
       <match url="(.*)" />
       <conditions>
          <add input="{HTTPS}" pattern="off" />
       </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
     </rule>
   </rules>
</rewrite>

我可以用 djroedger 先生的回答来解决这个问题。通过更换

<add input="{HTTPS}" pattern="off" />

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

进入我的 web.config,所以我的代码是

<rewrite>
  <rules>   
    <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
         <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
    </rule>
 </rules>
</rewrite>
于 2017-02-06T03:00:50.840 回答
5

从本文中删除 IISExpress 和 vs 目录并使用 44300 到 44399(含)的 ssl 端口范围对我有用

于 2018-10-08T16:28:50.573 回答
4

我遇到了这个问题,我在 FilterConfig.cs 中为全局需要 https 配置了我的站点。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new RequireHttpsAttribute());
    }

我忘记将项目 url 更改为 https:来自本教程http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-启用 SSL 第 4 部分下的 sql-database/。这导致了您遇到的错误。

于 2014-08-21T21:17:34.937 回答
3

另一个问题发生了两次:
在 IIS Expressapplicationhost.config中,绑定的顺序很重要。一种绑定可能优先于您的 SSL 绑定,从而使其无法正常工作。

例子:

<site name="MySite007" id="1">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\myuser\projects\mysolutionfolder\MyProject.Service" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation=":8081:localhost" />
        <binding protocol="http" bindingInformation=":8080:" /><!-- evil binding -->
        <binding protocol="https" bindingInformation="*:44327:localhost" />
    </bindings>
</site>

您可能添加了一个类似于第二个绑定的绑定,以便能够从外部访问您的 WebService localhost。由于此绑定侦听任何地址,因此尽管使用了不同的端口,但它似乎覆盖了 SSL 绑定。

移除邪恶绑定或将其向下移动。

于 2017-01-19T09:52:35.990 回答
2

这是从同事那里听到的轶事,但据称这是 chrome 强制 https 的问题。我通常在 Firefox 中启动,所以我以前没有见过这个问题。使用 firefox 或 ie 为我的同事工作。

于 2017-04-11T14:31:03.863 回答
2

如果您需要使用 44300-44399 范围之外的端口,这里有一个解决方法:

  • 在 IIS 中创建一个新站点(不是 Express)
  • 将 HTTPS 绑定到您需要的端口
  • 对于 SSL 证书,选择IIS Express 开发证书
  • 创建站点后,停止它,因为它实际上不需要运行

这将使用该端口注册 IIS Express 开发证书,这是我发现绕过 44300-44399 范围要求的最简单方法。

于 2019-04-09T15:34:25.667 回答
2

就我而言,我在端口 443 上运行时遇到了这个确切的错误,并且(由于我不会在这里介绍的原因)切换到不同的端口不是一种选择。为了让 IIS Express 在端口 443 上工作,我必须运行这个命令......

C:\Program Files\IIS Express>IisExpressAdminCmd.exe setupsslUrl -url:https://localhost:443/ -UseSelfSigned

非常感谢 Robert Muehsig 最初在此处发布此解决方案。

https://blog.codeinside.eu/2018/10/31/fix-ERR_CONNECTION_RESET-and-ERR_CERT_AUTHORITY_INVALID-with-iisexpress-and-ssl/

于 2020-11-15T20:57:04.197 回答
1

我的问题是由 Fiddler 引起的。当 Fiddler 崩溃时,它偶尔会干扰您的代理设置。简单地启动 Fiddler 似乎可以解决所有问题(也许它会以某种方式自行修复)。

于 2016-09-06T17:53:01.907 回答
1

' Digicert 证书安装检查器' 在这种情况下通常很有帮助。

通过比较序列号,我能够验证正在尝试的 SSL 证书是我期望的证书。

在此处输入图像描述

对我来说,@Jason Kleban 的答案是实际问题,但这可能是一个非常有用的实用程序,可以检查您关于正在加载什么证书的基本断言。

于 2017-05-05T19:56:29.857 回答
1

就我而言,在尝试了三天后,只需通过“以管理员身份运行”启动 Visual Studio 即可解决。

于 2020-09-28T18:19:53.633 回答
1

卡巴斯基问题!!我已经尝试了一切,如果我以管理员身份运行 VS2019,则使用 SSL 的 localhost 可以工作,但是在调试一段时间后连接丢失,我不得不重新运行该应用程序。唯一对我有用的是卸载卡巴斯基,难以置信,几天前我试图暂停卡巴斯基保护并没有解决问题,所以我放弃了防病毒问题,经过几天的尝试解决方案,我恢复了防病毒问题,卸载了卡巴斯基V 21.1 ...,尝试并工作,安装了 V 21.2 ...并且它也可以正常工作,而无需以管理员身份运行 VS

于 2020-11-18T15:02:35.820 回答
1

我在运行 Rider/VS 时遇到了同样的问题,两者都使用 IIS Express 来运行它。我遇到了 Postman、Chrome、Firefox 和前端应用程序调用它的问题。

事实证明,因为当我开始为这家公司工作时,我的笔记本电脑是为我使用的,所以前一个开发人员在第一次运行 IIS Express 时被问到是否要使用开发人员证书时单击了“否”。

这在 Windows 10 上通过转到添加删除程序(从新 UI 右侧有一个链接可启动用于添加和删除程序的经典应用程序)然后修复 IIS 10.0 或 8 或您正在运行的任何版本来修复。

然后尝试再次运行应用程序(我在 VS 中执行此操作,但假设 Rider 也会这样做),当询问您是否要使用开发人员证书时,您单击YES

在这上面浪费了几个小时,但在那之后一切都解决了!

于 2020-11-26T16:21:01.023 回答
1

对我来说,它使用此处博客中提供的解决方案工作。

C:\Program Files (x86)\IIS Express\IisExpressAdminCmd.exe setupsslUrl -url:https://localhost:44387/ -UseSelfSigned

使用您的项目用于 https 的端口。

于 2021-10-25T11:09:26.587 回答
0

我刚刚重建了我的电脑。这个线程给了我线索,我在项目设置>Web中意识到,项目被配置为使用HTTP和HTTP端口。通过将其更新为 HTTPS 和正确的 HTTPS 端口,一切都重新开始工作。

于 2016-10-23T12:07:46.870 回答
0

要继续了解有关在 44300 和 44399 之间设置 SSL 端口的其他答案,我无法更改 Visual Studio 中的 SSL Enabled 属性,也无法设置特定的 SSL URL。其他答案,如修复 IIS Express 并没有帮助。解决方案是进入与 sln 文件平行的 .vs 文件夹,打开 config 子文件夹,然后编辑 applicationhost.config 文件。然后,我手动添加了 https 行并重新启动了 VS。

<binding protocol="http" bindingInformation="*:24941:localhost" />
                <binding protocol="https" bindingInformation="*:44301:localhost" />
于 2016-12-14T17:11:26.070 回答
0

在我的情况下,我只是忘记了我在完整的 IIS 中为(在我的情况下) https://localhost:44300设置了绑定。你不能两者兼得!

于 2017-08-09T08:59:44.560 回答
0

就我而言,当我调试时,localhost url 被重定向到https://localhost 。这从一个时刻发生到另一个时刻,没有改变任何东西。我通过硬重新加载浏览器解决了这个问题。这里是链接

于 2019-07-09T17:53:05.830 回答
0

我有类似的问题,我的应用程序的招摇(在 SSL 端口上运行44319)突然停止工作,并且出现ERR_CONNECTION_RESET错误。

经过一番研究,我发现该端口44319已从 SSL 连接的允许端口列表中删除 - 使用此命令找到netsh http show sslcert > sslcert.txt。然后我不得不44319使用netsh http add sslcert ipport=0.0.0.0:44319 certhash=YOUR_CERT_HASH appid={YOUR_APP_ID}. 要查找certhashand appid,您可以使用第一个命令的输出。这对我有用!

在此处输入图像描述

于 2021-10-05T12:04:41.373 回答