SSL-Verbindung / Zurücksetzen der Verbindung mit IISExpress

140

Ich verwende das neue Visual Studio 2013 zum ersten Mal mit IISExpress (zuvor verwendeter ASP.net-Entwicklungsserver unter VS2010). Ich habe Probleme beim Debuggen meines Projekts.

Folgendes sehe ich in Chrome:

Es kann keine sichere Verbindung zum Server hergestellt werden. Dies kann ein Problem mit dem Server sein oder ein Clientauthentifizierungszertifikat erfordern, über das Sie nicht verfügen. Fehlercode: ERR_SSL_PROTOCOL_ERROR

Ich habe meine Eigenschaften -> Webdatei aktualisiert, sodass die Projekt-URL jetzt eine https-URL verwendet. Danach erhalte ich jedoch beim Starten einen neuen Fehler:

Die Verbindung zu localhost wurde unterbrochen. Fehlercode: ERR_CONNECTION_RESET

Vielen Dank

Kevin
quelle
Überprüfen Sie meine Antwort auf eine ähnliche Frage stackoverflow.com/questions/28195505/…
Bogac
1
Posting hier, weil es in den Antworten unten leicht übersehen werden kann. Wenn die akzeptierte Antwort für Sie nicht funktioniert, versuchen Sie dies stattdessen: stackoverflow.com/questions/20036984/…
IWriteApps
Das Ändern der Portnummer funktioniert bei mir.
Torun

Antworten:

47

Wenn Sie URLRewrite verwenden, um SSL-Verbindungen in Ihrer web.config zu erzwingen, wird Ihre localhost-Adresse wahrscheinlich neu geschrieben, um https zu erzwingen. Wenn das Debuggen mit aktiviertem SSL für Sie nicht wichtig ist und Sie URLRewrite verwenden, sollten <add input="{HTTP_HOST}" pattern="localhost" negate="true" />Sie den Abschnitt zum Umschreiben Ihrer Datei web.config hinzufügen . Das Umschreiben für lokale Hostadressen wird gestoppt, aber in einer Produktionsumgebung beibehalten. Wenn Sie URLRewrite nicht verwenden oder mit SSL debuggen müssen, kann http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx hilfreich sein. Es ist für VS2010, sollte aber auch für VS2013 ausreichen.

Djroedger
quelle
7
Ich habe es geschafft, indem ich diese Zeile zu URLrewrite hinzugefügt UND den Port so geändert habe, dass er im Bereich ": 44300-: 44398" liegt (siehe Antwort unten von uosef)
Rubanov
JA! Nach ein paar Stunden, in denen ich fast den Verstand verloren hätte, hat mir das geholfen!
Waka
363

Ich habe ERR_CONNECTION_RESET erhalten, weil meine in Visual Studio 2013 / IIS Express konfigurierte App- Portnummer NICHT im Bereich von 44300-: 44398 lag . (Ich habe keine Warnungen zu entlassen erinnern, die bekommen aus dieser Reihe.) Ändern der Port - Nummer etwas in diesem Bereich ist alles , was ich tun musste, damit es funktioniert.

Ich bemerkte dies, nachdem ich die netsh http show sslcert > sslcert.txtAusgabe überprüft hatte und etwas mit Dingen geklickt hatte, die ich kürzlich über die Portnummern gelesen hatte.

Jason Kleban
quelle
53
Ich bedaure nur, dass ich nur eine Gegenstimme für diesen Beitrag abgeben kann. Wie habe ich diese Art von Unsinn vor SO behoben?
Federbrecher
6
Sie können auch netsh http add sslcert ...den Port hinzufügen, den Sie verwenden möchten. In einigen Fällen nützlich.
Brasilienianldsjaguar
3
Crikey, das hat viele Stunden aufgefressen, ich werde nie wieder zurückkehren ... netshzur Rettung, das ist einen Blog-Beitrag wert ...
Jim
3
Ich habe festgestellt, dass dieser Bereich von Portnummern im Abschnitt Verwenden eines benutzerdefinierten SSL-Ports in der Dokumentation zur Behandlung von URL-Bindungsfehlern in der IIS Express-Dokumentation dokumentiert ist .
Schmalls
2
Arbeitete
87

Stellen Sie sicher, dass Sie alle vorherigen 'localhost'-Zertifikate entfernen, da diese mit den von IIS Express generierten Zertifikaten in Konflikt stehen können. Ich hatte denselben Fehler (ERR_SSL_PROTOCOL_ERROR) und es dauerte viele Stunden, bis ich ihn herausgefunden hatte, nachdem ich viele, viele "Lösungen" ausprobiert hatte. Mein Fehler war, dass ich mein eigenes 'localhost'-Zertifikat erstellt hatte und es zwei davon gab. Ich musste beide löschen und von IIS Express neu erstellen lassen.

So können Sie nach dem Zertifikat 'localhost' suchen und es entfernen:

  • Geben Sie beim Start -> mmc.exe ein
  • Datei -> Snap-In hinzufügen / entfernen ...
  • Wählen Sie Zertifikate -> Hinzufügen> -> Computerkonto -> Lokaler Computer
  • Überprüfen Sie unter Zertifikate> Persönlich> Zertifikate
  • Stellen Sie sicher, dass das vorhandene localhost-Zertifikat den Anzeigenamen "IIS Express Development Certificate" hat. Wenn nicht, löschen Sie es. Oder wenn mehrere, löschen Sie alle.

Wählen Sie in Visual Studio das Projekt aus und aktivieren Sie auf der Registerkarte "Eigenschaften" SSL = true. Speichern, erstellen und ausführen. IIS Express generiert ein neues 'localhost'-Zertifikat.

Hinweis: Wenn dies nicht funktioniert, versuchen Sie Folgendes: Deaktivieren Sie IIS Express für VS-Projekte und stoppen Sie alle darauf ausgeführten Apps, bevor Sie das Zertifikat 'localhost' entfernen. Sie können auch zu 'Systemsteuerung> Programme' gehen und IIS Express reparieren.

ShaTin
quelle
2
In meinem Fall gingen die IIS-Zertifikatseinstellungen verloren, die Zertifikate befanden sich jedoch auf der Disc. Das Festlegen von SSL-Zertifikaten und das Aktualisieren der HTTPS-Bindung auf der Website haben geholfen. Es ist wichtig, die https-Bindung erneut festzulegen, auch wenn das SSL-Zertifikat bereits in der Combobox ausgewählt ist.
Opewix
10
IIS Express musste repariert werden. Jetzt hat perfekt funktioniert. Danke
Homam
1
Danke dir. In meinem Fall hatte ich das Zertifikat versehentlich von meinem Computer gelöscht. Ich habe es gefunden, als ich versucht habe, diesen Befehl auszuführen, und es wurde folgende Meldung ausgegeben: "Hinzufügen eines SSL-Zertifikats fehlgeschlagen, Fehler: 1312 Eine angegebene Anmeldesitzung ist nicht vorhanden. Möglicherweise wurde sie bereits beendet." 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
Das war's! Doppelte Zertifikate und musste die Reparatur auch als Express-Teil durchführen.
Madamission
36

Ich fasse die Schritte zusammen, die mir bei der Lösung dieses Problems geholfen haben:

  1. Stellen Sie sicher, dass der SSL-Portbereich (von IIS Express verwendet) zwischen 44300-44398 liegt

Während der Installation verwendet IIS Express Http.sys, um die Ports 44300 bis 44399 für die Verwendung von SSL zu reservieren. Dadurch können Standardbenutzer (ohne erhöhte Berechtigungen) von IISExpress SSL konfigurieren und verwenden. Weitere Details hierzu finden Sie hier

  1. Führen Sie den folgenden Befehl als Administrator an der Eingabeaufforderung aus. Dadurch werden die SSL-Zertifikatbindungen auf dem Computer ausgegeben. Suchen Sie in dieser Liste das von IIS Express für den entsprechenden Port verwendete Zertifikat:

netsh http show sslcert> sslcert.txt

  1. Suchen Sie in der Datei sslcert.txt nach den folgenden Elementen (in meinem Fall wurde der IIS-Express an Port 44300 ausgeführt).

IP: Port : 0.0.0.0:44300

Zertifikat-Hash : eb380ba6bd10fb4f597cXXXXXXXXXXX

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

  1. Überprüfen Sie auch in der IIS Express-Verwaltungskonsole (RUN (Strg + R) -> inetmgr.exe), ob das entsprechende Zertifikat in den Serverzertifikaten vorhanden ist

(Klicken Sie auf ServerRoot -> unter Abschnitt IIS () -> Serverzertifikate öffnen.)

  1. Wenn Ihr localhost standardmäßig ein anderes Zertifikat als das in Schritt 3 aufgeführte verwendet, fahren Sie mit den folgenden Schritten fort

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}

Das New_Certificate_Hash ist Ihr Standardzertifikat, das mit Ihrem lokalen Host verknüpft ist (den wir in Schritt 4 gefunden haben) oder das Sie als neues Zertifikat hinzufügen möchten.

PS Vielen Dank für Ihre Antwort uosɐſ (die mir bei der Lösung dieses Problems geholfen hat)

Karthik
quelle
8
Ha, das Ändern des Ports von 53xxx auf 44300 hat den Trick für mich getan.
cdonner
Musste dies tun, nachdem ich von IIS zu IISExpress gewechselt war
K0D4
2
Das Ändern des Ports hat auch bei mir funktioniert. Weiß jemand, warum die Ports in diesem Bereich liegen müssen und wo sie konfiguriert sind?
Jim
Portwechsel für den Gewinn! Und das Gleiche gilt für Jims Kommentar, warum die Ports im Bereich 44300-44398 liegen müssen.
TChadwick
Während der Installation verwendet IIS Express Http.sys, um die Ports 44300 bis 44399 für die Verwendung von SSL zu reservieren. Dadurch können Standardbenutzer (ohne erhöhte Berechtigungen) von IISExpress SSL konfigurieren und verwenden. Weitere Details hierzu finden Sie hier -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik
26

Das Problem, das ich hatte, hatte irgendwann damit zu tun, dass HSTS für localhost aktiviert wurde und nicht erkannt wurde, dass dies meinen http: // localhost: someport in IIS Express beschädigen würde .

HSTS weist den Browser (in meinem Fall Chrome) an, IMMER eine URL über HTTPS anzufordern. Obwohl ich nicht einmal SSL für meine MVC 5-App aktiviert hatte, versuchte der Browser dennoch, mithilfe von HTTPS in der URL anstelle von HTTP auf meine Website zuzugreifen.

Die Reparatur?

  1. Surfen Sie zu Chrome: // net-internals / # hsts
  2. Geben Sie im Löschbereich "localhost" ein und löschen Sie den Datensatz aus Chrome.
Der gestiefelte Kater
quelle
1
Ja, hsts kann eine Ursache für dieses Problem sein. Das hat mir geholfen, danke.
Kosmo
12

Keine der oben genannten Optionen hat bei mir funktioniert. Ich musste folgendes tun:

  1. Deinstallierte IIS Express 8.0
  2. Alle Konfigurationen in meinem Dokumentenverzeichnis für IIS Express wurden gelöscht
  3. Neu installierte IIS Express 8.0
  4. Löschte das Projekt auf meinem lokalen Computer und lud eine saubere Version für TFS herunter
  5. Das Projekt lief - es lief dann über SSL und ich kann debuggen

Ich habe die Schritte von diesem Thread.

Hoffe das hilft.

lopezbertoni
quelle
2
Ich deinstalliere nur iis express und installiere es neu. jetzt funktioniert es
Xin
5
In meinem Fall war es ausreichend, nur die IIS-Installation (in der Systemsteuerung) zu reparieren .
Romanoza
Und die Leute zahlen Microsoft Geld dafür? Wie unglaublich schlecht muss Software entworfen werden, dass die einzige Lösung eine vollständige Deinstallation und Neuinstallation ist?!
Jez
@Jez - Nein, es ist kostenlos.
Eric Kelly
6

In meinem Fall habe ich ein selbstsigniertes Zertifikat erstellt und es funktioniert, außer dass im Browser ein Fehler angezeigt wurde, weil das Zertifikat nicht vertrauenswürdig war. Daher habe ich das Zertifikat im Snapin "Zertifikate" in den Ordner "Vertrauenswürdige Stammzertifizierungsstellen> Zertifikate" verschoben. Es hat funktioniert, und dann habe ich Visual Studio für diesen Tag geschlossen.

Am nächsten Tag startete ich mein Projekt und erhielt den in der ursprünglichen Frage genannten Fehler. Das Problem ist, dass das Zertifikat, mit dem Sie IISExpress konfiguriert haben, im Ordner Personal> Certificates vorhanden sein muss. Andernfalls funktioniert HTTPS nicht mehr. Nach dem erfolgreichen Start von IIS Express können Sie das Zertifikat wieder an den vertrauenswürdigen Speicherort ziehen. Es funktioniert so lange, bis Sie IIS Express neu starten.

Ich möchte nicht jedes Mal das Zertifikat hin und her ziehen, sondern platziere einfach eine Kopie des Zertifikats an beiden Stellen, und jetzt funktioniert alles einwandfrei.

moribvndvs
quelle
2
Sie können ein Zertifikat in das Zertifikat-Snap-In kopieren und einfügen, als wäre es eine normale Datei. Ich habe JAHRE gebraucht, um das herauszufinden.
Simon_Weaver
6

Ich habe das gleiche Problem in Visual Studio 2015. Weil ich die SSL-Bindung in web.config verwende

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

Und ich kann das Problem mit der Antwort von Herrn Djroedger beheben. Durch Ersetzen

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

mit

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

in meine web.config, also ist mein Code

<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>
Bommel
quelle
4

Ich hatte dieses Problem. Ich hatte meine Site für die globale Anforderung https in FilterConfig.cs konfiguriert.

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

Ich hatte vergessen, die Projekt-URL in https zu ändern: aus diesem Tutorial http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- SQL-Datenbank / unter ENABLE SSL Teil 4. Dies verursachte die Fehler, die Sie erhielten.

Schmied
quelle
4

Das Problem, das ich hatte, hing mit der Antwort von @Jason Kleban zusammen, aber ich hatte ein kleines Problem mit meinen Einstellungen in den Visual Studio-Eigenschaften für IIS Express.

Stellen Sie sicher, dass nach dem Ändern des Anschlusses im Bereich von 44300 bis 44399 die Adresse ebenfalls mit beginnt HTTPS

Geben Sie hier die Bildbeschreibung ein

Newteq Entwickler
quelle
3

Ein weiteres Problem, das mir zweimal passiert ist:
In IIS Express spielt applicationhost.configdie Reihenfolge der Bindungen eine Rolle. Eine Bindung hat möglicherweise Vorrang vor Ihrer SSL-Bindung, sodass sie nicht funktioniert.

Beispiel:

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

Möglicherweise haben Sie eine Bindung ähnlich der zweiten hinzugefügt, um von außen auf Ihren WebService zugreifen zu können localhost. Da diese Bindung jede Adresse abhört, scheint sie die SSL-Bindung zu überschreiben, obwohl ein anderer Port verwendet wurde.

Entfernen Sie die böse Bindung oder bewegen Sie sie nach unten.

Thibault D.
quelle
Das hat es für mich behoben. Vielen Dank!
Richb
3

Das Entfernen von IISExpress- und vs-Verzeichnissen und die Verwendung des SSL-Portbereichs von 44300 bis 44399 (einschließlich) aus diesem Artikel hat bei mir funktioniert

Luba Karpenko
quelle
danke dafür - hat für mich funktioniert, außer dass ich nicht aufgefordert wurde, dem Zertifikat in VS zu vertrauen - ich bin zu faul, um etwas dagegen zu unternehmen, also werde ich die Warnungen ignorieren und fortfahren!
Dave
2

Dies ist anekdotisch, wie von einem Kollegen gehört, aber angeblich ist dies ein Problem, bei dem Chrome https erzwingt. Normalerweise starte ich in Firefox, daher hatte ich dieses Problem noch nie gesehen. Mit Firefox oder dh für meinen Kollegen gearbeitet.

Ken Johnson
quelle
1

Mein Problem wurde von Fiddler verursacht. Wenn Fiddler abstürzt, werden gelegentlich Ihre Proxy-Einstellungen beeinträchtigt. Das einfache Starten von Fiddler schien alles zu reparieren (vielleicht repariert es sich irgendwie selbst).

Jason
quelle
1

In solchen Situationen ist der ' Digicert Certificate Installation Checker ' häufig hilfreich.

Durch Vergleichen der Seriennummer konnte ich überprüfen, ob das versuchte SSL-Zertifikat das erwartete war.

Geben Sie hier die Bildbeschreibung ein

Für mich war die Antwort von @Jason Kleban das eigentliche Problem, aber dies kann ein sehr nützliches Dienstprogramm sein, um Ihre grundlegenden Aussagen darüber zu überprüfen, welches Zertifikat geladen wird.

Simon_Weaver
quelle
Wow, vielen Dank. Die einzige Lösung, die für mich funktioniert hat.
Fernando Silva
1

Wenn Sie benötigen einen Hafen außerhalb des 44.300-44.399 Bereichs verwenden, dann ist hier eine Abhilfe:

  • Erstellen Sie eine neue Site in IIS (nicht Express).
  • Binden Sie HTTPS an den gewünschten Port
  • Wählen Sie als SSL-Zertifikat IIS Express-Entwicklungszertifikat
  • Sobald die Site erstellt wurde, stoppen Sie sie, da sie nicht unbedingt ausgeführt werden muss

Dies registriert das IIS Express Development-Zertifikat an diesem Port und ist der einfachste Weg, um die Anforderungen des Bereichs 44300-44399 zu umgehen.

Trnelson
quelle
0

Ich habe gerade meinen Computer umgebaut. Dieser Thread gab mir die Hinweise, wo ich in den Projekteinstellungen> Web feststellte, dass das Projekt für die Verwendung von HTTP und des HTTP-Ports konfiguriert wurde. Durch die Aktualisierung auf HTTPS und den richtigen HTTPS-Port begann alles wieder zu funktionieren.

Sam
quelle
0

Um weitere Antworten zum Festlegen des SSL-Ports zwischen 44300 und 44399 zu erhalten, konnte ich weder die Eigenschaft SSL Enabled in Visual Studio ändern noch eine bestimmte SSL-URL festlegen. Andere Antworten wie die Reparatur von IIS Express haben nicht geholfen. Die Lösung bestand darin, parallel zur sln-Datei in den Ordner .vs zu wechseln, den Unterordner config zu öffnen und dann die Datei applicationhost.config zu bearbeiten. Dann habe ich die https-Zeile manuell hinzugefügt und VS neu gestartet.

<binding protocol="http" bindingInformation="*:24941:localhost" />
                <binding protocol="https" bindingInformation="*:44301:localhost" />
r590
quelle
0

In meinem Fall hatte ich einfach vergessen, dass ich eine Bindung für (in meinem Fall) https: // localhost: 44300 in vollem IIS eingerichtet hatte. Sie können nicht beides haben!

James Ellis-Jones
quelle
Sie können beide haben, solange nicht beide gleichzeitig ausgeführt werden.
Trnelson
0

In meinem Fall wurde die localhost-URL beim Debuggen auf https: // localhost umgeleitet . Dies geschah von einem Moment zum anderen, ohne etwas zu ändern. Ich habe dieses Problem gelöst, indem ich den Browser neu geladen habe. Hier der Link

jaimenino
quelle