使用IISExpress重置SSL连接/连接

问题描述 投票:109回答:18

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

这就是我在Chrome中看到的内容:

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

我更新了我的Properies - > web文件,以便Project Url现在使用https URL。但是,在执行此操作后,我现在在启动时遇到新错误:

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

谢谢

ssl visual-studio-debugging visual-studio-2013
18个回答
37
投票

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


3
投票

发生在我身上的另一个问题是: 在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绑定,尽管使用了不同的端口。

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


2
投票

这是同事无意中听到的轶事,但据称这是Chrome迫使https的问题。我通常在firefox中启动,所以我之前没有看到过这个问题。使用firefox或者为我的同事工作。


1
投票

'Digicert certificate installation checker'在这种情况下经常有用。

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

enter image description here

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


0
投票

我的问题是由Fiddler引起的。当Fiddler崩溃时,它偶尔会与您的代理设置混淆。简单地启动Fiddler似乎解决了一切(也许它会以某种方式修复自己)。


0
投票

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


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

0
投票

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


0
投票

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


0
投票

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

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

这会将IIS Express Development证书注册到该端口,这是我发现满足44300-44399范围要求的最简单方法。


0
投票

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


300
投票

我得到ERR_CONNECTION_RESET因为我的Visual Studio 2013 / IIS Express配置的应用程序端口号不在范围内:44300-:44398。 (我不记得必须忽略任何警告才能超出该范围。)将端口号更改为此范围内的某些内容是我必须做的才能使其正常工作。

我在回顾了netsh http show sslcert > sslcert.txt输出之后发现了这一点,并且点击了我最近读到的有关端口号的内容。


76
投票

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

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

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

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

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


28
投票

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

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

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

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

netsh http show 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)并查找服务器证书中是否存在相应的证书

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

  1. 如果默认情况下localhost使用的步骤与步骤3中列出的证书不同,请继续执行以下步骤

netsh http delete 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ɐſ(帮助我解决了这个问题)


21
投票

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

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

修复?

  1. 冲浪到chrome:// net-internals / #hsts
  2. 在删除部分中,输入“localhost”并从Chrome中删除记录。

12
投票

上述选项均不适合我。我必须做以下事情:

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

我从this thread.得到了步骤

希望这可以帮助。


5
投票

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

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

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


5
投票

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

我可以用Mr.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>

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-sql-database/,在ENABLE SSL第4部分下。这导致了您获得的错误。

© www.soinside.com 2019 - 2024. All rights reserved.