SSL连接/连接重置与IISExpress
我第一次使用新的Visual Studio 2013与IISExpress(以前在VS2010上使用ASP.net开发服务器)。 我遇到了试图debugging我的项目的问题。
这是我在Chrome中看到的:
无法与服务器build立安全连接。 这可能是服务器的问题,或者可能需要您没有的客户端身份validation证书。 错误代码:ERR_SSL_PROTOCOL_ERROR
我更新了Properies – > web文件,以便Project Url现在使用https URL。 但是,这样做后,我现在启动时得到一个新的错误:
与本地主机的连接中断。 错误代码:ERR_CONNECTION_RESET
谢谢
如果您使用URLRewrite在web.config中强制SSL连接,则可能会重写您的localhost地址以强制https。 如果启用SSL的debugging对您并不重要,而且您正在使用URLRewrite,请考虑在您的web.config文件的重写部分中添加<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
。 它将停止重写任何本地主机地址,但将其保留在生产环境中。 如果您不使用URLRewrite或需要使用SSL进行debugging,则http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx可能会有所帮助。; 这是VS2010,但也应该足够VS2013。
我得到ERR_CONNECTION_RESET,因为我的Visual Studio 2013 / IIS Expressconfiguration的应用程序端口号 不在范围内:44300-:44398 。 (我不记得有任何警告要离开这个范围。)把端口号改成这个范围内的东西是我所要做的。
我查看了netsh http show sslcert > sslcert.txt
输出和点击了最近读取的有关端口号的东西,我注意到了这一点。
确保删除任何以前的“本地主机”证书,因为这些证书可能与IIS Express生成的证书冲突。 我有这个相同的错误(ERR_SSL_PROTOCOL_ERROR),并花了我好几个小时,试图找出许多“解决scheme”后,终于搞清楚了。 我的错误是我创build了自己的“本地主机”证书,其中有两个。 我不得不删除两个,并让IIS Express重新创build它。
这里是你如何检查和删除'localhost'证书:
- 在开始,input – > mmc.exe
- 文件 – >添加/删除pipe理单元…
- select证书 – >添加 – >计算机帐户 – >本地计算机
- 在证书>个人>证书下检查
- 确保存在的本地主机证书具有友好名称“IIS Express Development Certificate”。 如果没有,请删除它。 或者如果多个,全部删除。
在Visual Studio上,select项目并在属性选项卡下,启用SSL = true。 保存,生成并运行。 IIS Express将生成一个新的“localhost”证书。
注意:如果不起作用,请尝试以下操作:确保在VS项目上禁用IIS Express,并在删除“localhost”证书之前停止所有正在运行的应用程序。 此外,你可以去'控制面板>程序'和修复IIS Express。
我遇到的问题不得不在我身上,在某些时候,为本地主机启用HSTS,并没有意识到这将破坏我的IIS Express中的http:// localhost:someport 。
HSTS告诉浏览器(在我的情况下,Chrome浏览器)总是要求使用HTTPS的URL。 因此,即使我没有为我的MVC 5应用程序启用SSL,浏览器仍然会尝试使用URL中的HTTPS而不是HTTP来访问我的网站。
修复?
- 浏览到chrome:// net-internals /#hsts
- 在删除部分,input“localhost”并从Chrome中删除logging。
我正在总结帮助我解决这个问题的步骤:
-
确保SSL端口范围(由IIS Express使用)介于44300-44398之间
-
在命令提示符下以pipe理员身份运行以下命令。 这将输出计算机中的SSL证书绑定。 从这个列表中找出IIS Express使用的相应端口的证书:
netsh http显示sslcert> sslcert.txt
- 在sslcert.txt中查找下面的项目(在我的情况下,IIS express在44300端口上运行)
IP:port :0.0.0.0:44300
证书散列 :eb380ba6bd10fb4f597cXXXXXXXXXX
应用程序ID :{214124cd-d05b-4309-XXX-XXXXXXX}
- 也可以在IIS Expresspipe理控制台(RUN(Ctrl + R) – > inetmgr.exe)中查找相应的证书是否存在于服务器证书
(点击ServerRoot-> IIS() – >打开服务器证书)
- 如果您的本地主机默认使用除步骤3中列出的证书以外的其他证书,请继续执行以下步骤
netsh http删除sslcert支持= 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中find)绑定的默authentication书或您想添加为新证书的证书。
PS谢谢你的回答uosɐs (帮助我解决这个问题)
上述选项都不适合我。 我必须做到以下几点:
- 卸载IIS Express 8.0
- 删除IIS文档目录中的所有configuration
- 重新安装IIS Express 8.0
- 删除我的本地计算机上的项目,并为TFS下载了一个干净的版本
- 运行该项目 – 然后运行SSL,我可以debugging
我从这个线程得到了步骤。
希望这可以帮助。
我遇到了这个问题,我已经在FilterConfig.cs中将我的站点configuration为全局需要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 /下启用SSL第4部分。这导致了你得到的错误。
在我的情况下,我创build了一个自签名证书,并使其工作,除了我在浏览器中发生错误,因为证书是不可信的。 所以,我将证书移入证书pipe理单元中的“受信任的根证书颁发机构”>“证书”文件夹。 它工作,然后我closures了Visual Studio的一天。
第二天,我开始了我的项目,并收到原始问题中提到的错误。 问题是您configurationIISExpress的证书必须存在于“个人”>“证书”文件夹中,否则HTTPS将停止工作。 一旦IIS Express成功启动,您可以将证书拖回可信位置。 它将继续工作,直到您重新启动IIS Express。
每次都不想大惊小怪,我只是把证书的副本放在两个地方,现在一切正常。
我在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先生的回答来解决这个问题。 通过replace
<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>
另一个问题发生了两次:
在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绑定,尽pipe使用了不同的端口。
删除邪恶的绑定或将其向下移动。
我的问题是由提琴手引起的。 当提琴手崩溃它偶尔与你的代理设置混乱。 简单地启动Fiddler似乎解决了一切(也许它自己修复)。
我刚刚重build了我的电脑。 这个线程给了我线索,在项目设置> Web中实现,项目被configuration为使用HTTP和HTTP端口。 通过更新它到HTTPS和正确的HTTPS端口,一切都开始重新工作。
为了跟进有关在44300和44399之间设置SSL端口的其他答案,我无法更改Visual Studio中的SSL Enabled属性,也没有设置特定的SSL URL。 其他答案,如修复IIS Express没有帮助。 解决scheme是进入与.sn文件平行的.vs文件夹,打开config子文件夹,然后编辑applicationhost.config文件。 然后,我手动添加了https行,并重新启动VS.
<binding protocol="http" bindingInformation="*:24941:localhost" /> <binding protocol="https" bindingInformation="*:44301:localhost" />
这是偶然听到一个同事,但据说这是一个问题铬迫使HTTPS。 我通常在Firefox启动,所以我以前没有看到这个问题。 使用Firefox或ie为我的同事工作。
“ Digicert证书安装检查器 ”在这种情况下通常很有帮助。
我能够通过比较序列号来validation正在尝试的SSL证书。
对我来说@Jason Kleban答案是实际的问题,但是这可能是一个非常有用的实用程序来检查你的基本断言什么证书被加载。
在我的情况下,我只是忘记了我有一个绑定(在我的情况下)在完整的IIS设置为https:// localhost:44300 。 你不能两个都有!