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

Kevin
źródło
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.

djroedger
źródło
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.

Jason Kleban
źródło
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
3
Zauważyłem, że ten zakres numerów portów jest udokumentowany w sekcji Używanie niestandardowego portu SSL w dokumentacji Obsługa błędów wiązania adresu URL w dokumentacji IIS Express .
Schmalls
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.

ShaTin
źródło
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)

Karthik
źródło
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.
Kot w butach
źródło
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.

lopezbertoni
źródło
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.

moribvndvs
źródło
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>
pompon
źródło
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.

gsmith
źródło
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

Newteq Developer
źródło
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ół.

Thibault D.
źródło
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

Luba Karpenko
źródło
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.

Ken Johnson
źródło
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).

Jason
źródło
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.

Simon_Weaver
źródło
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.

trnelson
źródło
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.

Sam
źródło
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" />
r590
źródło
0

W moim przypadku po prostu zapomniałem, że mam ustawione powiązanie dla (w moim przypadku) https: // localhost: 44300 w pełnym IIS. Nie możesz mieć obu!

James Ellis-Jones
źródło
Możesz mieć oba, o ile nie są uruchomione w tym samym czasie.
trnelson
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

jaimenino
źródło