使用 IISExpress 重置 SSL 连接/连接

我第一次使用新的 VisualStudio2013和 IISExpress (以前在 VS2010上使用过 ASP.net 开发服务器)。我在调试我的项目时遇到了一些问题。

这就是我在 Chrome 浏览器中看到的:

无法建立到服务器的安全连接。这可能是服务器的问题,也可能需要客户端身份验证证书,而您没有。 错误代码: ERR _ SSL _ PROTOCOL _ ERROR

我更新了我的 Properties-> web 文件,这样 Project URL 现在就可以使用 https URL 了。然而,在这样做之后,我现在在启动时得到一个新的错误:

与本地主机的连接被中断。 错误代码: ERR _ CONNECTION _ RESET

谢谢

168826 次浏览

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

确保删除任何以前的“ localhost”证书,因为这些证书可能与 IISExpress 生成的证书冲突。我也有同样的错误(ERR _ SSL _ PROTOCOL _ ERROR) ,在尝试了许多“解决方案”之后,我花了许多小时才最终找到它。我的错误是,我创建了自己的“ localhost”证书,并且有两个这样的证书。我不得不删除这两个,并让 IIS 快递重新创建它。

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

  • 在开始时,键入→ mmc.exe
  • 文件→添加/删除管理单元..。
  • 选择证书→添加 > →计算机帐户→本地计算机
  • 查看证书 > 个人 > 证书
  • 确保现有的本地主机证书有一个友好的名称“ IIS 快速开发证书”。如果没有,删除它。如果是多个,则删除所有。

在 VisualStudio 上,选择 project 并在 property 选项卡下启用 SSL = true。保存、构建和运行。IISExpress 将生成一个新的“ localhost”证书。

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

我得到 ERR _ CONNECTION _ RESET 是因为我的 Visual Studio 2013/IIS Express 配置的应用程序 港口号码不在 44300-44398范围内。(我不记得为了得到这个范围的 出去而必须忽略任何警告。)将端口号更改为这个范围内的某个值是我所需要做的全部工作。

在回顾了 netsh http show sslcert > sslcert.txt输出和我最近读到的关于端口号的内容后,我注意到了这一点。

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

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

我已经忘记将项目 URL 更改为 https: 从本教程的 ENABLE SSL 第4部分下的 http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-sql-database/。这导致了你正在得到的错误。

以上的方法对我来说都不管用,我必须这样做:

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

我得到了 这根线。的步骤

希望这个能帮上忙。

我遇到的问题与我有关,在某个时候,为本地主机启用 HSTS,并没有意识到这会破坏 IIS Express 中的 http://localhost:someport

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

解决办法?

  1. 浏览 chrome://net-interals/# hsts
  2. 在 delete 部分,输入“ localhost”并从 Chrome 中删除记录。

我在总结帮助我解决这个问题的步骤:

  1. 确保 SSL 端口范围(由 IISExpress 使用)介于 44300-44398

在安装过程中,IIS Express 使用 Http.sys 保留端口44300 通过44399使用 SSL。这使标准用户(没有 升级的特权)来配置和使用 SSL 更多详细信息请参阅这里的 href = “ https://Learn.microsoft.com/en-us/iis/extons/using-iis-Express/running-iis-Express-without-management-rights # using-ssl”rel = “ noReferrer”>

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

Netsh http 显示 sslcert > sslcert.txt

  1. 在 sslcert.txt (在我的示例中是 IIS)中查找以下项目 港口44300)

IP: port : 0.0.0.0:44300

证书 Hash : eb380ba6bd10fb4f597cXXXXXXXXXX

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

  1. 还可以查看 IIS Express 管理控制台(RUN (Ctrl + R)-> inetmgr.exe) 并查找服务器证书中是否存在相应的证书

(单击 IIS ()-> Open the Server 下面的 ServerRoot-> 证书)

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

Netsh http delete sslcert ipport = 0.0.0.0:44300

Netsh http add sslcert ipport = 0.0.0.0:44300 certhash = 新建 _ 证书 _ Hash _ without _ space appid = {214124cd-d05b-4309-XXX-XXXXXXX }

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

谢谢你的回答 你们俩(帮助我解决了这个问题)

在我的例子中,我创建了一个自签名的证书并使其正常工作,但是由于该证书不受信任,我在浏览器中出现了一个错误。因此,我将该证书移动到证书管理单元中的 Trusted Root Securities Authority > Securities 文件夹中。成功了,然后我关闭了 Visual Studio。

第二天,我开始了我的项目,我收到了原始问题中提到的错误。问题是,您配置的 IISExpress 所使用的证书必须存在于“个人 > 证书”文件夹中,否则 HTTPS 将停止工作。一旦 IISExpress 成功启动,就可以将 cert 拖回到受信任位置。它将继续工作,直到您重新启动 IISExpress。

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

我的问题是由小提琴手引起的。当 Fiddler 崩溃时,它偶尔会干扰你的代理设置。仅仅启动 Fiddler 似乎就能解决所有问题(也许它能以某种方式自我修复)。

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

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

<binding protocol="http" bindingInformation="*:24941:localhost" />
<binding protocol="https" bindingInformation="*:44301:localhost" />

另一个发生在我身上两次的问题是:
在 IISExpress 的 applicationhost.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>

您可能已经添加了一个类似于第二个绑定的绑定,以便能够从 localhost之外访问您的 WebService。因为这个绑定监听任何地址,所以它似乎覆盖了 SSL 绑定,尽管使用了不同的端口。

移除 邪恶的束缚或者向下移动。

我在 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" />

所以我的代码是

<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>

这是从一个同事无意中听到的轶事,但据称这是一个问题与铬强制 https。我通常在 firefox 中启动,所以我以前没有看到过这个问题。使用火狐或者为我的同事工作。

在这种情况下,“ 数字证书安装检查器”通常是有帮助的。

我能够通过比较序列号来验证正在尝试的 SSL 证书是否是我所期望的那个。

enter image description here

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

在我的例子中,我只是忘记了我有一个完整 IIS 的 https://localhost:44300绑定设置(在我的例子中)。你不能两者兼得!

这篇文章中删除 IISExpress 和 vs 目录并使用 ssl 端口范围从44300到44399(包括44399)对我来说很有用

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

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

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

在我的例子中,本地主机 URL 在调试时被重定向到 https://localhost。这种情况从一个时刻发生到另一个时刻,没有改变任何事情。我在浏览器上重载了一次,解决了这个问题。这是 链接

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

确保将端口更改为范围在44300到44399之间后,地址也以 HTTPS开头

enter image description here

在我的例子中,我尝试了三天所有的方法,通过启动 VisualStudio“以管理员身份运行”解决了这个问题

在我的例子中,我正在端口443上运行这个错误,(出于某些原因,我不在这里讨论)切换到另一个端口不是一个选项。为了让 IIS Express 在端口443上工作,我必须运行这个命令..。

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

非常感谢 RobertMuexig 最初在这里发布这个解决方案。

Https://blog.codeinside.eu/2018/10/31/fix-err_connection_reset-and-err_cert_authority_invalid-with-iisexpress-and-ssl/

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

我在运行 Rider/VS 时遇到了同样的问题,两者都在使用 IIS Express 来运行它。我在邮递员,Chrome,Firefox 和前端应用程序中遇到了这个问题。

事实证明,因为我刚开始在这家公司工作的时候,我的笔记本电脑是专用的,所以当前面的开发人员被问到第一次运行 IIS Express 时是否想使用开发人员证书时,他点击了 没有

这个问题在 Windows 10中通过添加删除程序(从新的用户界面右边有一个链接,可以启动经典的添加和删除程序应用程序)然后修复 IIS 10.0或8或任何你正在运行的版本来解决。

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

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

我遇到过类似的问题,我的应用程序的大摇大摆(在 SSL 端口 44319上运行)突然停止工作,我得到了 ERR _ CONNEConnection _ RESET错误。

在做了一些研究之后,我发现端口 44319已经从允许 SSL 连接的端口列表中删除了——使用这个命令 netsh http show sslcert > sslcert.txt可以找到这些端口。 然后,我不得不使用 netsh http add sslcert ipport=0.0.0.0:44319 certhash=YOUR_CERT_HASH appid={YOUR_APP_ID}将端口 44319添加回 SSL 允许的端口。 要找到 certhashappid,您可以使用第一个命令的输出!

enter image description here

对我来说,它工作使用的解决方案提供 在这里的博客。

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

使用项目用于 https 的端口。