Connessione SSL / Ripristino connessione con IISExpress


140

Sto usando il nuovo Visual Studio 2013 con IISExpress per la prima volta (server di sviluppo ASP.net precedentemente utilizzato su VS2010). Sto riscontrando problemi nel tentativo di eseguire il debug del mio progetto.

Questo è quello che vedo in Chrome:

Impossibile stabilire una connessione sicura al server. Questo potrebbe essere un problema con il server o potrebbe richiedere un certificato di autenticazione client che non si possiede. Codice errore: ERR_SSL_PROTOCOL_ERROR

Ho aggiornato le mie proprietà -> file web in modo che l'URL del progetto utilizzi ora un URL https. Tuttavia, dopo averlo fatto, ora ricevo un nuovo errore all'avvio:

La connessione a localhost è stata interrotta. Codice errore: ERR_CONNECTION_RESET

Grazie


Controllare la mia risposta a una domanda simile stackoverflow.com/questions/28195505/...
Bogac

1
Pubblicando qui perché può essere facilmente perso nelle risposte di seguito. Se la risposta accettata non funziona per voi provare questo invece: stackoverflow.com/questions/20036984/...
IWriteApps

La modifica del numero di porta funziona per me.
torun

Risposte:


47

Se stai usando URLRewrite per forzare le connessioni SSL nel tuo web.config, probabilmente sta riscrivendo il tuo indirizzo localhost per forzare https. Se il debug con SSL abilitato non è importante per te e stai usando URLRewrite, prendi in considerazione l'aggiunta <add input="{HTTP_HOST}" pattern="localhost" negate="true" />nella sezione di riscrittura del tuo file web.config. Arresterà la riscrittura per qualsiasi indirizzo localhost ma lo lascerà in posizione in un ambiente di produzione. Se non si utilizza URLRewrite o è necessario eseguire il debug tramite SSL, potrebbe essere utile http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx . È per VS2010, ma dovrebbe bastare anche per VS2013.


7
L'ho fatto funzionare aggiungendo quella linea a URLrewrite E cambiando la porta per essere nell'intervallo ": 44300-: 44398" (vedi risposta sotto di uosef)
Rubanov

SÌ! Dopo alcune ore di quasi perdere la testa, questo è ciò che mi ha aiutato!
waka,

363

Stavo ricevendo ERR_CONNECTION_RESET perché il numero di porta dell'app configurato per Visual Studio 2013 / IIS Express NON era compreso nell'intervallo : 44300-: 44398 . (Non ricordo di aver dovuto eliminare alcun avviso per uscire da quell'intervallo.) Cambiare il numero di porta in qualcosa in questo intervallo è tutto ciò che dovevo fare per farlo funzionare.

Ho notato questo dopo aver esaminato l' netsh http show sslcert > sslcert.txtoutput e fare clic su qualcosa che ho letto di recente sui numeri di porta.


53
Mi dispiace solo di avere un solo voto da dare a questo post. Come ho risolto questo tipo di assurdità prima di SO?
Quillbreaker

6
È inoltre possibile utilizzare netsh http add sslcert ...per aggiungere la porta che si desidera utilizzare. Utile in alcuni casi.
brasilianoldsjaguar,

3
Crikey ha mangiato molte ore non tornerò mai più ... netshin soccorso, questo è degno di un post sul blog ...
Jim

3
Ho scoperto che questo intervallo di numeri di porta è documentato nella sezione Utilizzo di una porta SSL personalizzata della gestione degli errori di associazione URL nella documentazione di IIS Express .
Schmalls,

2
Ha

87

Assicurati di rimuovere tutti i precedenti certificati 'localhost' in quanto potrebbero entrare in conflitto con quello generato da IIS Express. Ho avuto lo stesso errore (ERR_SSL_PROTOCOL_ERROR) e mi ci sono volute molte ore per capirlo finalmente dopo aver provato molte "soluzioni". Il mio errore era che avevo creato il mio certificato "localhost" e ce n'erano due. Ho dovuto eliminare entrambi e fare in modo che IIS Express lo ricreasse.

Ecco come è possibile verificare e rimuovere il certificato 'localhost':

  • All'avvio digitare -> mmc.exe
  • File -> Aggiungi / Rimuovi snap-in ...
  • Seleziona Certificati -> Aggiungi> -> Account computer -> Computer locale
  • Controlla in Certificati> Personale> Certificati
  • Assicurarsi che il certificato localhost esistente abbia un nome descrittivo "Certificato di sviluppo IIS Express". In caso contrario, eliminalo. O se multiplo, elimina tutto.

Su Visual Studio, selezionare il progetto e nella scheda delle proprietà, abilitare SSL = true. Salva, costruisci ed esegui. IIS Express genererà un nuovo certificato "localhost".

Nota: se non funziona, prova questi: assicurati di disabilitare IIS Express sul progetto VS e di interrompere tutte le app in esecuzione su di esso prima di rimuovere il certificato 'localhost'. Inoltre, puoi andare su 'pannello di controllo> programmi' e riparare IIS Express.


2
Nel mio caso, le impostazioni del certificato IIS sono state perse, tuttavia i certificati si trovavano sul disco. L'impostazione dei certificati SSL e l'aggiornamento dell'associazione HTTPS sul sito Web sono stati utili. È importante impostare nuovamente l'associazione https anche se il certificato ssl è già selezionato nella casella combinata.
Opewix,

10
Doveva riparare IIS Express. Ora ha funzionato perfettamente. Grazie
Homam,

1
Grazie. Nel mio caso, avevo eliminato il certificato accidentalmente dal mio computer. L'ho trovato quando ho provato a eseguire questo comando e ha detto: "Aggiunta certificato SSL non riuscita, errore: 1312 Una sessione di accesso specificata non esiste. Potrebbe essere già stata terminata." 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,

Questo è stato! Certi duplicati e ho dovuto fare anche la riparazione, anche in parte.
madamission

36

Sto riassumendo i passaggi che mi hanno aiutato a risolvere questo problema:

  1. Assicurarsi che l'intervallo di porte SSL (utilizzato da IIS express) sia compreso tra 44300-44398

Durante l'installazione, IIS Express utilizza Http.sys per riservare le porte da 44300 a 44399 per l'uso SSL. Ciò consente agli utenti standard (senza privilegi elevati) di IISExpress di configurare e utilizzare SSL. Per maggiori dettagli a riguardo fai riferimento qui

  1. Eseguire il comando seguente come amministratore nel prompt dei comandi. Ciò produrrà i binding del certificato SSL nel computer. Da questo elenco, scopri il certificato utilizzato da IIS express per la porta corrispondente:

netsh http show sslcert> sslcert.txt

  1. Cerca gli elementi seguenti in sslcert.txt (nel mio caso l'espresso IIS era in esecuzione sulla porta 44300)

IP: porta : 0.0.0.0:44300

Hash certificato : eb380ba6bd10fb4f597cXXXXXXXXXX

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

  1. Cerca anche nella console di gestione IIS express (RUN (Ctrl + R) -> inetmgr.exe) e scopri se il certificato corrispondente esiste nei certificati server

(Fare clic su ServerRoot -> nella sezione IIS () -> Apri i certificati del server)

  1. Se il tuo host locale per impostazione predefinita utilizza un certificato diverso da quello elencato nel passaggio 3, continua con i passaggi seguenti

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 sarà il tuo certificato predefinito legato al tuo localhost (che abbiamo trovato nel passaggio 4) o quello che desideri aggiungere come nuovo certificato.

PS Grazie per la tua risposta uosɐſ (che mi ha aiutato a risolvere questo problema)


8
Ah, cambiare porta da 53xxx a 44300 ha fatto il trucco per me.
Cdonner,

Ho dovuto farlo dopo il passaggio da IIS a IISExpress
K0D4,

2
Cambiare la porta ha funzionato anche per me. Qualcuno sa perché le porte devono essere in questo intervallo e dove è configurato?
Jim,

Cambio di porta per la vittoria! E idem per il commento di Jim sul perché le porte devono essere nella gamma 44300-44398?
TChadwick,

Durante l'installazione IIS Express utilizza Http.sys per riservare le porte da 44300 a 44399 per l'uso SSL. Ciò consente agli utenti standard (senza privilegi elevati) di IISExpress di configurare e utilizzare SSL. Per maggiori dettagli a riguardo fai
Karthik

26

Il problema che stavo riscontrando aveva a che fare con me, a un certo punto nel tempo, abilitando HSTS per localhost e non rendendomi conto che ciò avrebbe rotto il mio http: // localhost: someport in IIS Express.

HSTS dice al browser (Chrome nel mio caso) di richiedere SEMPRE un URL usando HTTPS. Pertanto, anche se non avevo nemmeno abilitato SSL per la mia app MVC 5, il browser avrebbe comunque tentato di accedere al mio sito utilizzando HTTPS nell'URL anziché HTTP.

La correzione?

  1. Vai a Chrome: // net-internals / # hsts
  2. Nella sezione Elimina, inserisci "localhost" ed elimina il record da Chrome.

1
Sì, hsts potrebbe essere una causa di questo problema. Questo ha fatto la differenza per me, grazie.
Kosmo,

12

Nessuna delle opzioni sopra ha funzionato per me. Ho dovuto fare quanto segue:

  1. IIS Express 8.0 disinstallato
  2. Eliminate tutte le configurazioni nella directory Documenti per IIS Express
  3. Reinstallato IIS Express 8.0
  4. Ho eliminato il progetto sul mio computer locale e scaricato una versione pulita per TFS
  5. Ho eseguito il progetto, quindi è stato eseguito su SSL e sono in grado di eseguire il debug

Ho ottenuto i passaggi da questa discussione.

Spero che questo ti aiuti.


2
Ho appena disinstallato IIS Express e lo reinstallo. ora funziona
Xin

5
Nel mio caso è stato sufficiente riparare l'installazione IIS (nel Pannello di controllo).
romanoza,

E la gente paga soldi Microsoft per questo? Quanto deve essere progettato incredibilmente male il software che l'unica soluzione sia una disinstallazione completa e la reinstallazione ?!
Jez,

@Jez - No, è gratuito.
Eric Kelly,

6

Nel mio caso, ho creato un certificato autofirmato e l'ho fatto funzionare, tranne che stavo ottenendo un errore nel browser perché il certificato non era attendibile. Quindi, ho spostato il certificato nella cartella Autorità di certificazione radice attendibili> Certificati nello snap-in Certificati. Ha funzionato, e poi ho chiuso Visual Studio per il giorno.

Il giorno seguente, ho iniziato il mio progetto e ho ricevuto l'errore menzionato nella domanda originale. Il problema è che il certificato con cui hai configurato IISExpress deve esistere nella cartella Personale> Certificati o HTTPS smetterà di funzionare. Una volta avviato IIS Express, è possibile trascinare il certificato nella posizione attendibile. Continuerà a funzionare fino al riavvio di IIS Express.

Non volendo agitarmi trascinando il certificato avanti e indietro ogni volta, inserisco semplicemente una copia del certificato in entrambi i posti e ora tutto funziona bene.


2
Puoi copiare + incollare un certificato all'interno dello snap-in certificato come se fosse un file normale. Mi ci sono voluti ANNI per scoprirlo.
Simon_Weaver,

6

Ho lo stesso problema in Visual Studio 2015. Perché utilizzo l'associazione SSL in 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>

E posso risolvere il problema con la risposta di Mr.djroedger. Sostituendo

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

con

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

nel mio web.config, quindi il mio codice è

<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

Stavo avendo questo problema, avevo configurato il mio sito per https globali in FilterConfig.cs.

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

Avevo dimenticato di cambiare l'URL del progetto in https: da questo tutorial http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- sql-database / under ENABLE SSL part 4. Ciò ha causato gli errori che stavi riscontrando.


4

Il problema che avevo era legato alla risposta di @Jason Kleban, ma avevo un piccolo problema con le mie impostazioni nelle proprietà di Visual Studio per IIS Express.

Assicurarsi che dopo aver modificato la porta in modo che sia nell'intervallo: da 44300 a 44399, anche l'indirizzo inizia con HTTPS

inserisci qui la descrizione dell'immagine


3

Un altro problema che mi è successo due volte:
in IIS Express è importante applicationhost.configl'ordine delle associazioni. Un'associazione potrebbe avere la precedenza sull'associazione SSL, rendendola non funzionante.

Esempio:

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

Potresti aver aggiunto un'associazione simile alla seconda per poter accedere al tuo WebService dall'esterno localhost. Poiché questa associazione è in ascolto su qualsiasi indirizzo, sembra sovrascrivere l'associazione SSL sebbene sia stata utilizzata una porta diversa.

Rimuovi il legame malvagio o spostalo verso il basso.


Questo mi ha risolto. Grazie!
richb

3

Rimozione di directory IISExpress e vs e utilizzo dell'intervallo di porte ssl da 44300 a 44399 (incluso) da questo articolo ha funzionato per me


grazie per questo - ha funzionato per me, tranne per il fatto che non mi è stato chiesto di fidarmi del certificato in VS - Sono troppo pigro per fare qualcosa al riguardo, quindi ignorerò gli avvertimenti e procederò!
Dave,

2

Questo è aneddotico come sentito da un collega, ma presumibilmente si tratta di un problema con Chrome forzare https. Di solito lancio in Firefox, quindi non avevo mai visto questo problema prima. Utilizzando Firefox o ie ha funzionato per il mio collega.


1

Il mio problema è stato causato da Fiddler. Quando Fiddler si arresta in modo anomalo, occasionalmente si scherza con le impostazioni del proxy. Il semplice lancio di Fiddler sembrava risolvere tutto (forse si ripara da solo).


1

Il " controllo dell'installazione del certificato Digicert " è spesso utile in situazioni come questa.

Sono stato in grado di verificare che il certificato SSL tentato fosse quello che mi aspettavo confrontando il numero seriale.

inserisci qui la descrizione dell'immagine

Per me la risposta di Jason Kleban era il vero problema, ma questa può essere un'utilità molto utile per verificare le asserzioni di base su quale certificato viene caricato.


Wow, grazie mille. L'unica soluzione che ha funzionato per me.
Fernando Silva,

1

Se avete bisogno di usare una al di fuori della porta del range 44.300-44.399, ecco una soluzione:

  • Crea un nuovo sito in IIS (non Express)
  • Associa HTTPS alla porta di cui hai bisogno
  • Per Certificato SSL, selezionare Certificato di sviluppo IIS Express
  • Una volta creato il sito, interrompilo, poiché in realtà non deve essere in esecuzione

Questo registra il certificato di sviluppo IIS Express con quella porta ed è il modo più semplice che ho trovato per aggirare il requisito della gamma 44300-44399.


0

Avevo appena ricostruito il mio computer. Questo thread mi ha dato gli indizi, dove mi sono reso conto nelle impostazioni del progetto> Web, il progetto è stato configurato per utilizzare HTTP e la porta HTTP. Aggiornandolo a HTTPS e alla porta HTTPS corretta, tutto ha ripreso a funzionare.


0

Per seguire altre risposte sull'impostazione della porta SSL tra 44300 e 44399, non sono stato in grado di modificare la proprietà SSL abilitata in Visual Studio, né di impostare un URL SSL specifico. Altre risposte, come la riparazione di IIS Express, non sono state di aiuto. La soluzione era quella di andare nella cartella .vs parallela al file sln, aprire la sottocartella config e quindi modificare il file applicationhost.config. Quindi, ho aggiunto manualmente la riga https e ho riavviato VS.

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


0

Nel mio caso, l'URL di localhost è stato reindirizzato a https: // localhost durante il debug. Questo è successo da un momento all'altro, senza cambiare nulla. Ho risolto questo problema ricaricando il browser. Qui il link

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.