2013-10-17 441 views
79

我第一次使用新的Visual Studio 2013與IISExpress(以前在VS2010上使用ASP.net開發服務器)。我遇到了試圖調試我的項目的問題。SSL連接/連接重置與IISExpress

這是我在Chrome中看到:

無法建立到服務器的安全連接。這可能是服務器的問題,或者它可能需要您沒有的客戶端身份驗證證書。 錯誤代碼:ERR_SSL_PROTOCOL_ERROR

我更新了我的Properies - > web文件,以便Project Url現在使用https URL。但是,這樣做後,我現在遇到一個新的錯誤啓動時:

與本地主機的連接被中斷。 錯誤代碼:ERR_CONNECTION_RESET

感謝

+0

檢查我的回答類似的問題 http://stackoverflow.com/questions/28195505/mvc-webapplication-no-longer-starts-in-iis-express-redirects-to-https-localho/ 29848227#29848227 – Bogac

+1

由於在下面的答案中可能會漏掉,所以在這裏發帖。如果接受的答案不適用於您,請嘗試以下代碼:http://stackoverflow.com/questions/20036984/how-do-i-fix-a-missing-iis-express-ssl-certificate – IWriteApps

回答

33

如果您使用URLRewrite強制在你的web.config SSL連接,它可能重寫你的本地主機地址強制HTTPS。如果啓用SSL的調試對您並不重要,而且您正在使用URLRewrite,請考慮在您的web.config文件的重寫部分中添加<add input="{HTTP_HOST}" pattern="localhost" negate="true" />。它將停止重寫任何本地主機地址,但將其保留在生產環境中。 如果您不使用URLRewrite或需要使用SSL進行調試,http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx可能會有所幫助。它適用於VS2010,但也適用於VS2013。

+2

我使它工作通過將該行添加到URLrewrite並將端口更改爲範圍「:44300-:44398」(請參閱​​下面的答案,由uosef) – Rubanov

65

請確保刪除任何以前的「本地主機」證書,因爲這些證書可能會與IIS Express生成的證書衝突。我有這個相同的錯誤(ERR_SSL_PROTOCOL_ERROR),花了我好幾個小時才嘗試了很多很多的「解決方案」後終於弄清楚了。我的錯誤是我創建了自己的'本地主機'證書,其中有兩個。我不得不刪除這兩個文件,並讓IIS Express重新創建它。

這裏是你如何檢查並清除 'localhost' 的證書:

  • 上的開始,類型 - > MMC.EXE
  • 文件 - >添加/刪除管理單元...
  • 選擇證書 - >添加> - >計算機賬戶 - >本地計算機
  • 下證書>個人支票>證書
  • 確保存在有一個好記的名稱「IIS Express開發證書」 localhost的證書。如果沒有,請刪除它。或者如果多個,全部刪除。

在Visual Studio上,選擇項目,然後在屬性選項卡下啓用SSL = true。保存,生成並運行。 IIS Express將生成一個新的「本地主機」證書。

注意:如果不起作用,請嘗試以下操作:確保在刪除「localhost」證書之前,禁用VS項目上的IIS Express並停止所有正在運行的應用程序。此外,您可以轉到「控制面板>程序」並修復IIS Express。

+2

在我的情況下,IIS證書設置丟失,但是證書在光盤上。設置SSL證書並更新網站上的HTTPS綁定。即使已經在組合框中選擇了SSL證書,重新設置https綁定也很重要。 – opewix

+5

它需要修復IIS Express。 現在工作完美。謝謝 – Homam

+1

謝謝。就我而言,我從計算機中意外刪除了證書。當我嘗試執行此命令時發現它,並且它說:「SSL證書添加失敗,錯誤:1312 指定的登錄會話不存在,它可能已被終止。「 '的netsh HTTP DELETE的sslcert ipport = 0.0.0.0:443' '的netsh HTTP添加的sslcert ipport = 0.0.0.0:443的appid =」{GUID-APP-ID}」 CERTHASH = 「THUMBPRINTOFMYCERTIFICATEINHEXADECIMAL」' – UKM

209

我是在範圍越來越ERR_CONNECTION_RESET因爲我的Visual Studio 2013/IIS快遞配置應用端口號沒有:44300-:44398。 (我不記得有任何警告要求那個範圍。)將端口號更改爲此範圍內的內容是我必須做的工作。

我在回顧netsh http show sslcert > sslcert.txt輸出後點擊了我最近閱讀的有關端口號的東西,我注意到了這一點。

+26

我只遺憾我只有一個人贊成這個帖子,在SO之前我是如何修正這種廢話的? – quillbreaker

+2

你也可以使用'netsh http add sslcert ...'來添加你想使用的端口。有些情況下 – brazilianldsjaguar

+1

看到這裏的各種帖子,說明「重置您的端口號」,你是我見過的唯一一篇文章,說明了一個範圍 - 因此解決了這個問題的一個。[Doffs hat] –

3

我遇到了這個問題,我在FilterConfig.cs中配置了我的站點以用於全局require 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.這導致你得到的錯誤。

7

上述選項都不適用於我。我必須做到以下幾點:

  1. 卸載IIS Express在我的文檔目錄的IIS快遞
  2. 重新安裝了IIS快車8.0
  3. 刪除的項目我的本地機器上下載8.0
  4. 刪除所有的配置乾淨的版本TFS
  5. 然項目 - 它,然後跑過來SSL,我能夠調試

我被T他從this thread.

希望這會有所幫助。

+1

我只是不知道iis express,然後重新安裝它。現在它工作 – Xin

+4

在我的情況下,它只是**只是修復IIS安裝(在控制面板中)。 – romanoza

+0

人們向微軟支付這筆錢嗎?軟件的設計有多難以置信,唯一的解決方案就是完全卸載並重新安裝?! – Jez

14

我遇到的問題不得不在我身上,在某個時間點,爲本地主機啓用HSTS,並沒有意識到這會在IIS Express中破壞我的http://localhost:someport

HSTS告訴瀏覽器(在我的情況下,Chrome瀏覽器)總是要求使用HTTPS的URL。因此,即使我沒有爲我的MVC 5應用程序啓用SSL,瀏覽器仍然會嘗試使用URL中的HTTPS而不是HTTP來訪問我的網站。

修復?

  1. 衝浪前往chrome://網內部/#HSTS
  2. 在刪除部分中,輸入 「本地主機」,並刪除從Chrome中的記錄。
16

我總結,幫助我解決這個問題的步驟:

  1. 確保SSL端口範圍(IIS使用快遞)是 之間44300-44398

During installation, IIS Express uses Http.sys to reserve ports 44300 through 44399 for SSL use. This enables standard users (without elevated privileges) of IISExpress to configure and use SSL. For more details on this refer here

  1. 在命令提示符下以管理員身份運行以下命令。這將輸出計算機中的SSL證書綁定。從該列表中,找出由IIS使用的證書表示對相應的端口:

netsh http show sslcert > sslcert.txt

  • 查找在中的sslcert以下項目。TXT(在我的情況下IIS 明示在端口運行44300)
  • IP:port : 0.0.0.0:44300

    Certificate Hash : eb380ba6bd10fb4f597cXXXXXXXXXX

    Application ID : {214124cd-d05b-4309-XXX-XXXXXXX}

  • 也期待在IIS表達管理控制檯(RUN(按Ctrl + R) - > inetmgr.exe) 和發現如果在服務器證書中存在相應的證書
  • (Click on the ServerRoot -> under section IIS() -> Open the Server Certificates)

  • 如果本地主機默認使用比在步驟列出的一個其它不同的證書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步中找到)或您要添加爲新的證書之一。

    P.S.謝謝你的回答uosɐſ(幫我解決了這個問題)

    +4

    哈,將端口從53xxx更改爲44300對我來說是個訣竅。 – cdonner

    +0

    必須從IIS切換到IISExpress後才能執行此操作 – K0D4

    +2

    更改端口對我也有效。有誰知道爲什麼端口必須在這個範圍內以及它的配置? – Jim

    3

    在我的情況下,我創建了一個自簽名證書並且它工作,除了我在瀏覽器中發生錯誤,因爲證書是不可信的。因此,我將證書移入證書管理單元中的「受信任的根證書頒發機構」>「證書」文件夾。它的工作,然後我關閉了Visual Studio的一天。

    第二天,我開始了我的項目,並收到原始問題中提到的錯誤。問題是您配置IISExpress的證書必須存在於Personal> Certificates文件夾中,否則HTTPS將停止工作。一旦IIS Express成功啓動,您可以將證書拖回可信位置。它會繼續工作,直到您重新啓動IIS Express。

    不想大驚小怪,每次都要拖動證書,我只是把證書的副本放在兩個地方,現在一切正常。

    +1

    您可以將證書複製+粘貼到證書管理單元中,就像它是一個常規文件一樣。帶我瞭解了這一點。 –

    0

    我的問題是由提琴手造成的。當Fiddler偶爾使用代理設置崩潰時。簡單地啓動Fiddler似乎可以解決所有問題(或許它會以某種方式修復它)。

    0

    我剛剛重建了我的電腦。這個線程給了我線索,我在項目設置> Web中實現了該項目,項目被配置爲使用HTTP和HTTP端口。通過將其更新爲HTTPS和正確的HTTPS端口,一切都開始再次運行。

    0

    要繼續其他有關在44300和44399之間設置SSL端口的答案,我無法更改Visual Studio中的「啓用SSL」屬性,也沒有設置特定的SSL URL。其他答案,例如修復IIS Express並沒有幫助。解決方案是進入平行於sln文件的.vs文件夾,打開config子文件夾,然後編輯applicationhost.config文件。然後,我手動添加了https行,並重新啓動了VS.

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

    是發生在我兩次另一個問題:
    在IIS快遞的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綁定,儘管使用了不同的端口。

    刪除邪惡綁定或將其移下。

    +0

    這爲我修好了。謝謝! – richb

    2

    我在Visual Studio 2015年將同樣的問題,因爲我使用SSL在web.config中

    <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="{HTTP_HOST}" pattern="localhost" negate="true" />

    更換

    <add input="{HTTPS}" pattern="off" /> 
    

    到我的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> 
    
    1

    從同事聽到這個傳聞,但據稱這是鉻迫使https的問題。我通常在Firefox中啓動,所以我以前沒有見過這個問題。使用Firefox或ie爲我的同事工作。

    0

    'Digicert certificate installation checker'在這種情況下通常很有幫助。

    我能夠通過比較序列號來驗證正在嘗試的SSL證書是我期望的證書。

    enter image description here

    對我來說@Jason Kleban答案是實際的問題,但是這可能是一個非常有用的工具,查看正在裝載什麼證書,你的基本主張。

    0

    在我的情況下,我只是簡單地忘記了我在整個IIS中爲(在我的情況下)https://localhost:44300設置了綁定。你不能兼得!