使用 IISExpress 进行 SSL 连接/连接重置

Posted

技术标签:

【中文标题】使用 IISExpress 进行 SSL 连接/连接重置【英文标题】:SSL Connection / Connection Reset with IISExpress 【发布时间】:2013-10-25 09:10:25 【问题描述】:

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

这是我在 Chrome 中看到的:

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

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

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

谢谢

【问题讨论】:

查看我对类似问题的回答***.com/questions/28195505/… 在这里发帖是因为在下面的答案中很容易错过它。如果接受的答案对您不起作用,请尝试以下操作:***.com/questions/20036984/… 更改端口号,对我有用。 我学会了在被接受的答案之前尝试投票最多的答案,哈哈;如果我尝试过这个命令 - 我会从浪费在计算机科学这个神奇问题上的时间中节省一些时间 grrrrr。无论如何,感谢您提出这个问题! 【参考方案1】:

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

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

【讨论】:

我很遗憾我只为这篇文章投了一票。在 SO 之前我是如何解决这种废话的? 您也可以使用netsh http add sslcert ... 添加您要使用的端口。在某些情况下很有用。 Crikey 这花了很多时间,我再也回不来了...netsh 救援,这值得写一篇博文... 我发现这个范围的端口号记录在Using a Custom SSL Port section of the Handling URL Binding Failures in IIS Express documentation中。 @DaniDev - 多年的准备、痛苦的动力、数小时的坚持和幸运!【参考方案2】:

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

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

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

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

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

【讨论】:

在我的例子中,IIS 证书设置丢失了,但是证书在光盘上。在网站上设置 SSL 证书和更新 HTTPS 绑定有所帮助。即使在组合框中已经选择了 ssl 证书,再次设置 https 绑定也很重要。 需要修复 IIS Express。现在工作完美。谢谢 谢谢。就我而言,我不小心从计算机中删除了证书。当我尝试执行此命令时发现它并抛出说:“SSL 证书添加失败,错误:1312 指定的登录会话不存在。它可能已经被终止。” netsh http delete sslcert ipport=0.0.0.0:443netsh http add sslcert ipport=0.0.0.0:443 appid="GUID-APP-ID" certhash="THUMBPRINTOFMYCERTIFICATEINHEXADECIMAL" 就是这样!重复的证书,也必须进行修复 iis express 部分。 我必须先关闭并重新打开 Visual Studio,然后才能看到接受新证书的对话框。【参考方案3】:

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

【讨论】:

我通过将该行添加到 URLrewrite 并将端口更改为“:44300-:44398”范围内(请参阅下面的 uosef 答案)来实现它 是的!经过几个小时几乎失去理智后,这对我有帮助!【参考方案4】:

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

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

在安装过程中,IIS Express 使用 Http.sys 保留端口 44300 通过 44399 供 SSL 使用。这使标准用户(没有 IISExpress 的提升权限)来配置和使用 SSL。为了 更多详情请参考here

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

netsh http 显示 sslcert > sslcert.txt

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

IP:端口:0.0.0.0:44300

证书哈希:eb380ba6bd10fb4f597cXXXXXXXXXX

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

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

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

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

netsh http 删除 sslcert ipport=0.0.0.0:44300

netsh http add sslcert ipport=0.0.0.0:44300 certhash=New_Certificate_Hash_without_space appid=214124cd-d05b-4309-XXX-XXXXXXX

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

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

【讨论】:

哈,将端口从 53xxx 更改为 44300 对我有用。 从 IIS 切换到 IISExpress 后必须这样做 更改端口也对我有用。有谁知道为什么端口必须在这个范围内以及它的配置位置? 为了胜利而改变端口!对于 Jim 关于为什么端口需要在 44300-44398 范围内的评论也是如此? 在安装期间,IIS Express 使用 Http.sys 保留端口 44300 到 44399 以供 SSL 使用。这使 IISExpress 的标准用户(没有提升的权限)能够配置和使用 SSL。有关这方面的更多详细信息,请参阅此处 -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…【参考方案5】:

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

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

解决办法?

    浏览到 chrome://net-internals/#hsts 在删除部分,输入“localhost”并从 Chrome 中删除记录。

【讨论】:

是的,hsts 可能是导致此问题的原因。这对我有用,谢谢。 这行得通,但我认为你需要在每次 chrome 更新时都这样做。【参考方案6】:

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

    已卸载 IIS Express 8.0 删除了我的文档目录中 IIS Express 的所有配置 重新安装 IIS Express 8.0 删除了我本地机器上的项目并下载了 TFS 的干净版本 运行项目 - 然后通过 SSL 运行,我可以调试

我从this thread.得到了步骤

希望这会有所帮助。

【讨论】:

我只是卸载了iis express,然后重新安装。现在可以了 就我而言,只需修复 IIS 安装(在控制面板中)就足够了。 人们为此付钱给微软?软件设计得有多糟糕,唯一的解决办法是完全卸载并重新安装?! @Jez - 不,它是免费的。【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

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

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

【讨论】:

您可以在证书管理单元中复制和粘贴证书,就像它是常规文件一样。我花了几年的时间才发现这一点。【参考方案9】:

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

&lt;add input="HTTP_HOST" pattern="localhost" negate="true" /&gt;

进入我的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>

【讨论】:

【参考方案10】:

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

【讨论】:

谢谢 - 对我有用,但没有提示我信任 VS 中的证书 - 我懒得做任何事情,所以会忽略警告并继续!【参考方案11】:

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

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

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

【讨论】:

【参考方案12】:

我遇到过两次的另一个问题: 在 IIS Express 的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 绑定。

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

【讨论】:

这为我解决了问题。谢谢!【参考方案13】:

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

【讨论】:

【参考方案14】:

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

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

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

【讨论】:

【参考方案15】:

在我的情况下,我在端口 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/

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

“Digicert certificate installation checker”在这种情况下通常很有帮助。

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

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

【讨论】:

哇,非常感谢。唯一对我有用的解决方案。【参考方案18】:

在我尝试了三天之后,通过“以管理员身份运行”启动 Visual Studio 解决了。

【讨论】:

【参考方案19】:

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

【讨论】:

【参考方案20】:

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

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

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

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

在这件事上浪费了很多时间,但在那之后全部排序!

【讨论】:

【参考方案21】:

对我来说,它使用in the blog here.提供的解决方案工作

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

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

【讨论】:

【参考方案22】:

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

【讨论】:

【参考方案23】:

要继续了解有关在 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" />

【讨论】:

【参考方案24】:

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

【讨论】:

你可以同时拥有两者,只要它们不是同时运行。【参考方案25】:

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

【讨论】:

【参考方案26】:

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

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

【讨论】:

以上是关于使用 IISExpress 进行 SSL 连接/连接重置的主要内容,如果未能解决你的问题,请参考以下文章