Połączenie SSL / Resetowanie połączenia za pomocą IISExpress


140

Po raz pierwszy używam nowego programu Visual Studio 2013 z usługami IISExpress (wcześniej używany serwer ASP.net Development na VS2010). Mam problemy z debugowaniem projektu.

Oto, co widzę w Chrome:

Nie można nawiązać bezpiecznego połączenia z serwerem. Może to być problem z serwerem lub może wymagać certyfikatu uwierzytelniania klienta, którego nie masz. Kod błędu: ERR_SSL_PROTOCOL_ERROR

Zaktualizowałem plik internetowy Właściwości -> tak, aby adres URL projektu używał teraz adresu URL https. Jednak po wykonaniu tej czynności podczas uruchamiania pojawia się nowy błąd:

Połączenie z hostem lokalnym zostało przerwane. Kod błędu: ERR_CONNECTION_RESET

Dzięki


Sprawdź moją odpowiedź na podobne pytanie stackoverflow.com/questions/28195505/…
Bogac

1
Publikowanie tutaj, ponieważ można go łatwo przeoczyć w poniższych odpowiedziach. Jeśli zaakceptowana odpowiedź nie działa dla Ciebie, spróbuj tego: stackoverflow.com/questions/20036984/…
IWriteApps

Zmiana numeru portu działa dla mnie.
torun

Odpowiedzi:


47

Jeśli używasz URLRewrite do wymuszania połączeń SSL w swoim web.config, prawdopodobnie przepisuje twój adres lokalnego hosta, aby wymusić https. Jeśli debugowanie z włączonym SSL nie jest dla Ciebie ważne i używasz URLRewrite, rozważ dodanie <add input="{HTTP_HOST}" pattern="localhost" negate="true" />do sekcji przepisywania pliku web.config. Zatrzyma przepisywanie dowolnego adresu hosta lokalnego, ale pozostawi go na miejscu w środowisku produkcyjnym. Jeśli nie używasz URLRewrite lub musisz debugować za pomocą SSL, może pomóc http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx . To jest dla VS2010, ale powinno wystarczyć również dla VS2013.


7
Zrobiłem to, dodając tę ​​linię do URLrewrite ORAZ zmieniając port tak, aby znajdował się w zakresie ": 44300-: 44398" (patrz odpowiedź poniżej uosef)
Rubanov

TAK! Po kilku godzinach, w których prawie straciłem rozum, to mi pomogło!
waka

363

Otrzymuję ERR_CONNECTION_RESET, ponieważ numer portu mojej skonfigurowanej aplikacji Visual Studio 2013 / IIS Express NIE mieści się w zakresie : 44300-: 44398 . (Nie przypominam sobie, żebym musiał odrzucać ostrzeżenia, aby wyjść poza ten zakres.) Zmiana numeru portu na coś z tego zakresu to wszystko, co musiałem zrobić, aby to zadziałało.

Zauważyłem to po przejrzeniu danych netsh http show sslcert > sslcert.txtwyjściowych i kliknięciu rzeczy, które ostatnio czytałem o numerach portów.


53
Żałuję tylko, że mam tylko jeden głos za tym postem. Jak naprawiłem tego rodzaju bzdury przed SO?
quillbreaker

6
Możesz także użyć, netsh http add sslcert ...aby dodać port, którego chcesz użyć. Przydatne w niektórych przypadkach.
brazilianldsjaguar

3
Crikey to zajęło wiele godzin, nigdy nie wrócę ... netshna ratunek, to jest warte wpisu na blogu ...
Jim


2
Nadal pracował z programem Visual Studio 2017 / IIS Express 10
TvdH

87

Pamiętaj, aby usunąć wszystkie poprzednie certyfikaty „localhost”, ponieważ mogą one kolidować z certyfikatem wygenerowanym przez IIS Express. Miałem ten sam błąd (ERR_SSL_PROTOCOL_ERROR) i zajęło mi wiele godzin, zanim w końcu go rozgryzłem po wypróbowaniu wielu "rozwiązań". Mój błąd polegał na tym, że stworzyłem własny certyfikat „localhost” i było ich dwóch. Musiałem usunąć oba i ponownie utworzyć IIS Express.

Oto, jak możesz sprawdzić i usunąć certyfikat „localhost”:

  • Na Start wpisz -> mmc.exe
  • Plik -> Dodaj / Usuń przystawkę ...
  • Wybierz Certyfikaty -> Dodaj> -> Konto komputera -> Komputer lokalny
  • Sprawdź w sekcji Certyfikaty> Osobiste> Certyfikaty
  • Upewnij się, że istniejący certyfikat hosta lokalnego ma przyjazną nazwę „IIS Express Development Certificate”. Jeśli nie, usuń go. Jeśli jest wiele, usuń wszystkie.

W programie Visual Studio wybierz projekt i na karcie właściwości włącz SSL = true. Oszczędzaj, buduj i uruchamiaj. IIS Express wygeneruje nowy certyfikat „localhost”.

Uwaga: jeśli to nie zadziała, wypróbuj następujące rozwiązania: wyłącz IIS Express w projekcie VS i zatrzymaj wszystkie uruchomione na nim aplikacje przed usunięciem certyfikatu „localhost”. Możesz także przejść do „panelu sterowania> programy” i naprawić IIS Express.


2
W moim przypadku ustawienia certyfikatów IIS zostały utracone, jednak certyfikaty znajdowały się na dysku. Pomogło ustawienie certyfikatów SSL i aktualizacja powiązania HTTPS w witrynie. Ważne jest, aby ponownie ustawić powiązanie https, nawet jeśli certyfikat ssl jest już wybrany w combobox.
opewix

10
Musiał naprawić IIS Express. Teraz działało idealnie. Dzięki
Homam

1
Dziękuję Ci. W moim przypadku przypadkowo usunąłem certyfikat z komputera. Znalazłem go, gdy próbowałem wykonać to polecenie i wyrzuciło komunikat: „Nie udało się dodać certyfikatu SSL, błąd: 1312 Określona sesja logowania nie istnieje. Mogła już zostać zakończona”. 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

To było to! Zduplikowane certyfikaty i musiałem wykonać naprawę również w części ekspresowej.
madamission

36

Podsumowuję kroki, które pomogły mi w rozwiązaniu tego problemu:

  1. Upewnij się, że zakres portów SSL (używany przez IIS Express) zawiera się w przedziale 44300-44398

Podczas instalacji program IIS Express używa Http.sys do rezerwowania portów od 44300 do 44399 do używania protokołu SSL. Umożliwia to standardowym użytkownikom (bez podwyższonych uprawnień) IISExpress konfigurowanie i używanie protokołu SSL. Więcej informacji na ten temat można znaleźć tutaj

  1. Uruchom poniższe polecenie jako administrator w wierszu polecenia. Spowoduje to wyświetlenie powiązań certyfikatu SSL na komputerze. Z tej listy znajdź certyfikat używany przez IIS express dla odpowiedniego portu:

netsh http show sslcert> sslcert.txt

  1. Poszukaj poniższych elementów w sslcert.txt (w moim przypadku ekspres IIS działał na porcie 44300)

IP: port : 0.0.0.0:44300

Skrót certyfikatu : eb380ba6bd10fb4f597cXXXXXXXXXX

Identyfikator aplikacji : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Zajrzyj również do konsoli zarządzania usługami IIS Express (RUN (Ctrl + R) -> inetmgr.exe) i sprawdź, czy odpowiedni certyfikat istnieje w certyfikatach serwera

(Kliknij ServerRoot -> w sekcji IIS () -> Open the Server Certificates)

  1. Jeśli twój localhost domyślnie używa innego certyfikatu niż ten wymieniony w kroku 3, wykonaj poniższe kroki

netsh http usuń 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 będzie Twoim domyślnym certyfikatem powiązanym z Twoim lokalnym serwerem (znalezionym w kroku 4) lub tym, który chcesz dodać jako nowy certyfikat.

PS Dziękuję za odpowiedź uosɐſ (która pomogła mi w rozwiązaniu tego problemu)


8
Ha, zmiana portu z 53xxx na 44300 załatwiła mi sprawę.
cdonner

Musiał to zrobić po przełączeniu się z IIS na IISExpress
K0D4

2
Zmiana portu też się sprawdziła. Czy ktoś wie, dlaczego porty muszą znajdować się w tym zakresie i gdzie jest skonfigurowane?
Jim

Zmiana portu, aby wygrać! I tak samo jak komentarz Jima, dlaczego porty muszą należeć do zakresu 44300-44398?
TChadwick

Podczas instalacji program IIS Express używa Http.sys do rezerwowania portów od 44300 do 44399 do używania protokołu SSL. Umożliwia to standardowym użytkownikom (bez podwyższonych uprawnień) IISExpress konfigurowanie i używanie protokołu SSL. Więcej informacji na ten temat można znaleźć tutaj -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik

26

Problem, którego doświadczyłem, był związany ze mną, w pewnym momencie, gdy włączyłem HSTS dla localhost i nie zdawałem sobie sprawy, że to zepsuje mój http: // localhost: someport w IIS Express.

HSTS mówi przeglądarce (w moim przypadku Chrome), aby ZAWSZE zażądała adresu URL przy użyciu protokołu HTTPS. Dlatego, mimo że nawet nie włączyłem SSL dla mojej aplikacji MVC 5, przeglądarka nadal będzie próbowała uzyskać dostęp do mojej witryny za pomocą protokołu HTTPS w adresie URL zamiast HTTP.

Poprawka?

  1. Przejdź do chrome: // net-internals / # hsts
  2. W sekcji usuwania wpisz „localhost” i usuń rekord z Chrome.

1
Tak, przyczyną tego problemu może być hst. To mi się przydało, dzięki.
Kosmo

12

Żadna z powyższych opcji nie działała dla mnie. Musiałem wykonać następujące czynności:

  1. Odinstalowane usługi IIS Express 8.0
  2. Usunięto wszystkie konfiguracje w moim katalogu Dokumenty dla IIS Express
  3. Ponownie zainstalowano IIS Express 8.0
  4. Usunąłem projekt na moim komputerze lokalnym i pobrałem czystą wersję dla TFS
  5. Uruchomiłem projekt - następnie przeszedł przez SSL i jestem w stanie debugować

Podjąłem kroki z tego wątku.

Mam nadzieję że to pomoże.


2
Po prostu odinstalowałem iis express i ponownie go zainstalowałem. teraz to działa
Xin

5
W moim przypadku wystarczyło po prostu naprawić instalację IIS (w Panelu Sterowania).
romanoza

I ludzie płacą za to Microsoftowi pieniądze? Jak niewiarygodnie źle musi być zaprojektowane oprogramowanie, że jedyną poprawką jest pełne odinstalowanie i ponowne zainstalowanie ?!
Jez

@Jez - Nie, to nic nie kosztuje.
Eric Kelly

6

W moim przypadku utworzyłem certyfikat z podpisem własnym i sprawiłem, że działał, z wyjątkiem tego, że w przeglądarce pojawił się błąd, ponieważ certyfikat był niezaufany. Dlatego przeniosłem certyfikat do folderu Zaufane główne urzędy certyfikacji> Certyfikaty w przystawce Certyfikaty. Zadziałało, a potem zamknąłem program Visual Studio na jeden dzień.

Następnego dnia zacząłem projekt i otrzymałem błąd wymieniony w pierwotnym pytaniu. Problem polega na tym, że certyfikat, z którym skonfigurowałeś IISExpress, musi istnieć w folderze Osobiste> Certyfikaty lub HTTPS przestanie działać. Po pomyślnym uruchomieniu usług IIS Express można przeciągnąć certyfikat z powrotem do zaufanej lokalizacji. Będzie działać do momentu ponownego uruchomienia usług IIS Express.

Nie chcąc zawracać sobie głowy przeciąganiem certyfikatu za każdym razem, po prostu umieszczam kopię certyfikatu w obu miejscach i teraz wszystko działa dobrze.


2
Certyfikat można skopiować i wkleić do przystawki certyfikatu, tak jakby był zwykłym plikiem. Zajęło mi LATA, żeby się tego dowiedzieć.
Simon_Weaver

6

Mam ten sam problem w Visual Studio 2015. Ponieważ używam wiązania SSL w 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>

I mogę rozwiązać ten problem, odpowiadając na pytanie pana dżroedgera. Wymieniając

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

z

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

do mojego web.config, więc mój kod jest

<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

Miałem ten problem, skonfigurowałem moją witrynę pod kątem globalnego wymagania https w FilterConfig.cs.

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

Zapomniałem zmienić adres URL projektu na https: z tego samouczka http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- sql-database / pod WŁĄCZ SSL część 4. Spowodowało to otrzymywane błędy.


4

Problem, który miałem, był związany z odpowiedzią @Jason Kleban, ale miałem jeden mały problem z moimi ustawieniami we właściwościach programu Visual Studio dla IIS Express.

Upewnij się, że po zmianie portu na z zakresu: od 44300 do 44399 adres również zaczyna się od HTTPS

wprowadź opis obrazu tutaj


3

Inny problem, który zdarzył mi się dwukrotnie: w
IIS Express applicationhost.configkolejność powiązań ma znaczenie. Jedno powiązanie może mieć pierwszeństwo przed powiązaniem SSL, przez co nie będzie działać.

Przykład:

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

Być może dodałeś powiązanie podobne do drugiego, aby mieć dostęp do swojej usługi internetowej z zewnątrz localhost. Ponieważ to powiązanie nasłuchuje na dowolnym adresie, wydaje się nadpisywać powiązanie SSL, chociaż został użyty inny port.

Usuń złe wiązanie lub przesuń je w dół.


To naprawiło to dla mnie. Dzięki!
richb

3

Usunięcie katalogów IISExpress i vs oraz użycie zakresu portów ssl od 44300 do 44399 (włącznie) z tego artykułu zadziałało dla mnie


dzięki za to - zadziałało dla mnie, z wyjątkiem tego, że nie zostałem poproszony o zaufanie certowi w VS - jestem zbyt leniwy, aby cokolwiek z tym zrobić, więc zignoruję ostrzeżenia i kontynuuję!
Dave

2

Jest to anegdotyczne, jak słyszano od współpracownika, ale rzekomo jest to problem z wymuszaniem https przez Chrome. Zwykle uruchamiam się w przeglądarce Firefox, więc wcześniej nie widziałem tego problemu. Korzystanie z przeglądarki Firefox lub ie działało dla mojego współpracownika.


1

Mój problem został spowodowany przez Fiddlera. Gdy Fiddler ulega awarii, czasami miesza z ustawieniami serwera proxy. Wydawało się, że samo uruchomienie Fiddlera naprawia wszystko (być może sam się naprawia).


1

W takich sytuacjach często pomocny jest „ moduł sprawdzania instalacji certyfikatu Digicert ”.

Udało mi się sprawdzić, czy próba uzyskania certyfikatu SSL była tym, którego oczekiwałem, porównując numer seryjny.

wprowadź opis obrazu tutaj

Dla mnie @Jason Kleban odpowiedzią był rzeczywisty problem, ale może to być bardzo przydatne narzędzie do sprawdzenia podstawowych twierdzeń o tym, jaki certyfikat jest ładowany.


Wow, bardzo dziękuję. Jedyne rozwiązanie, które u mnie zadziałało.
Fernando Silva

1

Jeśli musisz użyć portu spoza zakresu 44300-44399, oto obejście:

  • Utwórz nową witrynę w usługach IIS (nie Express)
  • Powiąż HTTPS z portem, którego potrzebujesz
  • W przypadku certyfikatu SSL wybierz opcję IIS Express Development Certificate
  • Po utworzeniu witryny zatrzymaj ją, ponieważ w rzeczywistości nie musi być uruchomiona

To rejestruje certyfikat IIS Express Development z tym portem i jest najłatwiejszym sposobem obejścia wymagania zakresu 44300-44399.


0

Właśnie odbudowałem komputer. Ten wątek dał mi wskazówki, gdzie zdałem sobie sprawę, że w ustawieniach projektu> Sieć projekt został skonfigurowany do korzystania z HTTP i portu HTTP. Po zaktualizowaniu go do HTTPS i prawidłowego portu HTTPS wszystko zaczęło działać ponownie.


0

Aby przejść do innych odpowiedzi dotyczących ustawiania portu SSL między 44300 a 44399, nie mogłem zmienić właściwości SSL Enabled w programie Visual Studio ani ustawić określonego adresu URL SSL. Inne odpowiedzi, takie jak naprawianie IIS Express, nie pomogły. Rozwiązaniem było przejście do folderu .vs równolegle do pliku sln, otwarcie podfolderu config, a następnie edycja pliku applicationhost.config. Następnie ręcznie dodałem linię https i ponownie uruchomiłem VS.

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


0

W moim przypadku adres URL localhost został przekierowany do https: // localhost, gdy debugowałem. Działo się to z jednej chwili na drugą, niczego nie zmieniając. Rozwiązałem ten problem, wykonując trudne ponowne załadowanie przeglądarki. Tutaj link

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.