IISExpress的SSL连接/连接重置


140

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

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

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

我更新了我的属性->网络文件,以便Project Url现在使用https URL。但是,这样做之后,现在启动时出现新错误:

与本地主机的连接已中断。错误代码:ERR_CONNECTION_RESET

谢谢


检查我对类似问题的回答 stackoverflow.com/questions/28195505/…–
Bogac

1
在此处发布,因为它很容易在下面的答案中丢失。如果接受的答案不适合工作,你试试这个,而不是stackoverflow.com/questions/20036984/...
IWriteApps

更改端口号对我有用。
torun

Answers:


47

如果您使用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。


7
我通过在URLrewrite中添加该行并将端口更改为“:44300-:44398”(请参见uosef的答复)来使其工作
Rubanov,2015年

是!在几个小时几乎失去理智之后,这才对我有所帮助!
waka

363

我得到ERR_CONNECTION_RESET是因为我的Visual Studio 2013 / IIS Express配置的应用程序端口号不在范围:44300-:44398中。(我不记得必须取消任何警告才能超出该范围。)我必须要做的就是将端口号更改为该范围内的值。

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


53
我仅感到遗憾的是,我对此职位只有一个赞。我如何在SO之前解决这种废话呢?
quillbreaker 2015年

6
您还可以使用netsh http add sslcert ...添加要使用的端口。在某些情况下很有用。
brazilianldsjaguar 2015年

3
克里克吃了很多小时,我再也回不去了…… netsh要救援,这值得写博客……
吉姆(Jim


2
仍可

87

确保删除所有以前的“ localhost”证书,因为这些证书可能与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。


2
就我而言,IIS证书设置丢失了,但是证书在光盘上。设置SSL证书和更新网站上的HTTPS绑定有所帮助。即使在组合框中已选择ssl证书,再次设置https绑定也很重要。
opewix

10
它需要修复IIS Express。现在工作完美。谢谢
Homam '16

1
谢谢。就我而言,我是不小心从计算机上删除了证书。当我尝试执行此命令时找到了它,并说:“ SSL证书添加失败,错误:1312指定的登录会话不存在。它可能已终止。” netsh http delete sslcert ipport=0.0.0.0:443 netsh http add sslcert ipport=0.0.0.0:443 appid="{GUID-APP-ID}" certhash="THUMBPRINTOFMYCERTIFICATEINHEXADECIMAL"
UKM

就是这样!证书重复,也必须进行维修。
madamission

36

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

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

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

  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),然后在服务器证书中查找相应的证书是否存在。

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

  1. 如果默认情况下您的本地主机使用不同于步骤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中找到)绑定的默认证书,或者是您要添加为新证书的证书。

PS感谢您的回答“ uosɐſ”(它帮助我解决了此问题)


8
哈,将端口从53xxx更改为44300对我有用。
cdonner '16

从IIS切换到IISExpress后必须执行此操作
K0D4

2
更改端口也对我有用。有谁知道为什么端口必须在此范围内以及在何处进行配置?
吉姆(Jim)

换港取胜!吉姆(Jim)关于端口为何必须在44300-44398范围内的评论也同样如此?
TChadwick '18

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

26

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

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

解决办法?

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

1
是的,HST可能是导致此问题的原因。谢谢。
科斯莫

12

以上选项对我都不起作用。我必须执行以下操作:

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

我从这个线程得到了步骤

希望这可以帮助。


2
我只是拆装iis express,然后重新安装它。现在它的工作原理

5
就我而言,仅修复 IIS安装(在“控制面板”中)就足够了。
罗马诺扎

人们为此付钱给微软吗?必须设计唯一的修复程序是完全卸载并重新安装,这真是令人难以置信的糟糕!
杰兹

@Jez-不,它是免费的。
埃里克·凯利

6

就我而言,我创建了一个自签名证书并使其正常工作,但由于证书不受信任,导致浏览器出现错误,但我发现该错误。因此,我将证书移到了证书管理单元中的“受信任的根证书颁发机构>证书”文件夹中。它起作用了,然后我关闭了Visual Studio。

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

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


2
您可以将证书复制+粘贴到证书管理单元中,就好像它是常规文件一样。花了我几年的时间才发现。
Simon_Weaver

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>

4

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

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

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


4

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

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

在此处输入图片说明


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>

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

移开邪恶的捆绑或将其向下移动。


这为我解决了。谢谢!
richb


2

这是同事闻所未闻的传闻,但据称这是Chrome强制使用https的问题。我通常在firefox中启动,所以我以前从未见过此问题。使用firefox或为我的同事工作。


1

我的问题是由提琴手造成的。当Fiddler崩溃时,它有时会弄乱您的代理设置。仅仅启动Fiddler似乎就可以解决所有问题(也许它会以某种方式自我修复)。


1

在这种情况下,“ Digicert证书安装检查器 ”通常很有用。

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

在此处输入图片说明

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


哇,非常感谢 唯一对我有用的解决方案。
Fernando Silva

1

如果您需要使用44300-44399范围之外的端口,请采用以下解决方法:

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

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


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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.