Conexión SSL / Restablecimiento de conexión con IISExpress

140

Estoy usando el nuevo Visual Studio 2013 con IISExpress por primera vez (anteriormente utilicé el servidor de desarrollo ASP.net en VS2010). Me encuentro con problemas al intentar depurar mi proyecto.

Esto es lo que veo en Chrome:

No se puede establecer una conexión segura con el servidor. Esto puede ser un problema con el servidor o puede requerir un certificado de autenticación de cliente que no tiene. Código de error: ERR_SSL_PROTOCOL_ERROR

Actualicé mi archivo web Properies -> para que la URL del proyecto utilice una URL https ahora. Sin embargo, después de hacer eso, ahora aparece un nuevo error al iniciar:

La conexión a localhost fue interrumpida. Código de error: ERR_CONNECTION_RESET

Gracias

Kevin
fuente
Comprueba mi respuesta a una pregunta similar stackoverflow.com/questions/28195505/…
Bogac
1
Publicar aquí porque puede perderse fácilmente en las respuestas a continuación. Si la respuesta aceptada no funciona para usted, intente esto: stackoverflow.com/questions/20036984/…
IWriteApps
Cambiar el número de puerto, funciona para mí.
Torun

Respuestas:

47

Si está utilizando URLRewrite para forzar conexiones SSL en su web.config, probablemente esté reescribiendo su dirección de host local para forzar https. Si la depuración con SSL habilitado no es importante para usted y está utilizando URLRewrite, considere agregar <add input="{HTTP_HOST}" pattern="localhost" negate="true" />a la sección de reescritura de su archivo web.config. Detendrá la reescritura de cualquier dirección de host local, pero la dejará en su lugar en un entorno de producción. Si no está utilizando URLRewrite o necesita depurar con SSL, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx podría ayudar. Es para VS2010, pero también debería ser suficiente para VS2013.

djroedger
fuente
77
Lo hice funcionar agregando esa línea a URLrewrite Y cambiando el puerto para que esté en el rango ": 44300-: 44398" (vea la respuesta a continuación por uosef)
Rubanov
¡SI! ¡Después de algunas horas de casi perder la cabeza, esto es lo que me ayudó!
waka
363

Estaba obteniendo ERR_CONNECTION_RESET porque mi número de puerto de la aplicación configurada de Visual Studio 2013 / IIS Express NO estaba en el rango : 44300-: 44398 . (No recuerdo haber tenido que descartar ninguna advertencia para salir de ese rango). Cambiar el número de puerto a algo en este rango es todo lo que tuve que hacer para que funcionara.

Me di cuenta de esto después de revisar la netsh http show sslcert > sslcert.txtsalida y hacer clic en algo que leí recientemente sobre los números de puerto.

Jason Kleban
fuente
53
Solo lamento haber dado un solo voto a favor para esta publicación. ¿Cómo solucioné este tipo de tonterías antes de SO?
Quillbreaker
66
También puede usar netsh http add sslcert ...para agregar el puerto que desea usar. Útil en algunos casos.
brazilianldsjaguar
3
Crikey esto consumió muchas horas que nunca volveré ... netshal rescate, esto es digno de una publicación de blog ...
Jim
3
Descubrí que este rango de números de puerto está documentado en la sección Uso de un puerto SSL personalizado de la gestión de errores de enlace de URL en la documentación de IIS Express .
Schmalls
2
Todavía trabajé con Visual Studio 2017 / IIS Express 10
TvdH
87

Asegúrese de eliminar todos los certificados 'localhost' anteriores, ya que podrían entrar en conflicto con el generado por IIS Express. Tuve este mismo error (ERR_SSL_PROTOCOL_ERROR), y me llevó muchas horas finalmente resolverlo después de probar muchas "soluciones". Mi error fue que había creado mi propio certificado 'localhost' y había dos de ellos. Tuve que eliminar ambos y hacer que IIS Express lo recreara.

Aquí es cómo puede verificar y eliminar el certificado 'localhost':

  • En Inicio, escriba -> mmc.exe
  • Archivo -> Agregar / Eliminar complemento ...
  • Seleccione Certificados -> Agregar> -> Cuenta de computadora -> Computadora local
  • Verifique en Certificados> Personal> Certificados
  • Asegúrese de que el certificado localhost que existe tenga un nombre descriptivo "Certificado de desarrollo IIS Express". Si no, bórralo. O si es múltiple, elimine todo.

En Visual Studio, seleccione el proyecto y, en la pestaña de propiedades, active SSL = true. Guardar, construir y ejecutar. IIS Express generará un nuevo certificado 'localhost'.

Nota: Si no funciona, intente lo siguiente: asegúrese de deshabilitar IIS Express en el proyecto VS y de detener todas las aplicaciones en ejecución antes de eliminar el certificado 'localhost'. Además, puede ir a 'panel de control> programas' y Reparar IIS Express.

ShaTin
fuente
2
En mi caso, la configuración del certificado IIS se perdió, sin embargo, los certificados estaban en el disco. La configuración de certificados SSL y la actualización del enlace HTTPS en el sitio web ayudaron. Es importante configurar el enlace https nuevamente, incluso si el certificado SSL ya está seleccionado en el cuadro combinado.
opewix
10
Necesitaba reparar IIS Express. Ahora funcionó perfectamente. Gracias
Homam
1
Gracias. En mi caso, borré el certificado accidentalmente de mi computadora. Lo encontré cuando intenté ejecutar este comando y arrojó el mensaje: "Error al agregar certificado SSL, Error: 1312 No existe una sesión de inicio de sesión especificada. Puede que ya haya finalizado". 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
¡Eso fue todo! Certificados duplicados y tuve que hacer la reparación también es parte expresa.
madamission
36

Estoy resumiendo los pasos que me ayudaron a resolver este problema:

  1. Asegúrese de que el rango de puertos SSL (utilizado por IIS express) esté entre 44300-44398

Durante la instalación, IIS Express utiliza Http.sys para reservar los puertos 44300 a 44399 para el uso de SSL. Esto permite a los usuarios estándar (sin privilegios elevados) de IISExpress configurar y usar SSL. Para más detalles sobre esto, consulte aquí

  1. Ejecute el siguiente comando como administrador en el símbolo del sistema. Esto generará los enlaces del Certificado SSL en la computadora. En esta lista, descubra el certificado utilizado por IIS express para el puerto correspondiente:

netsh http show sslcert> sslcert.txt

  1. Busque los siguientes elementos en sslcert.txt (en mi caso, el IIS express se estaba ejecutando en el puerto 44300)

IP: puerto : 0.0.0.0:44300

Hash de certificado : eb380ba6bd10fb4f597cXXXXXXXXXX

ID de la aplicación : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. También busque en la consola de administración express de IIS (RUN (Ctrl + R) -> inetmgr.exe) y encuentre si el certificado correspondiente existe en los Certificados del servidor

(Haga clic en ServerRoot -> en la sección IIS () -> Abrir los certificados del servidor)

  1. Si su host local usa de manera predeterminada un certificado diferente al que figura en el Paso 3, continúe con los pasos a continuación

netsh http eliminar 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 será su certificado predeterminado vinculado con su host local (que encontramos en el paso 4) o el que desea agregar como un nuevo certificado.

PD: Gracias por tu respuesta uosɐſ (que me ayudó a resolver este problema)

Karthik
fuente
8
Ja, cambiar el puerto de 53xxx a 44300 hizo el truco para mí.
Cdonner
Tuve que hacer esto después de cambiar de IIS a IISExpress
K0D4
2
Cambiar el puerto también funcionó para mí. ¿Alguien sabe por qué los puertos deben estar en este rango y dónde está configurado?
Jim
¡Cambio de puerto para la victoria! ¿Y lo mismo para el comentario de Jim de por qué los puertos deben estar en el rango 44300-44398?
TChadwick
Durante la instalación, IIS Express utiliza Http.sys para reservar los puertos 44300 a 44399 para uso SSL. Esto permite a los usuarios estándar (sin privilegios elevados) de IISExpress configurar y usar SSL. Para obtener más detalles sobre esto, consulte aquí -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik
26

El problema que estaba experimentando tenía que ver conmigo, en algún momento, habilitar HSTS para localhost y no darme cuenta de que esto rompería mi http: // localhost: someport en IIS Express.

HSTS le dice al navegador (Chrome en mi caso) que SIEMPRE solicite una URL usando HTTPS. Por lo tanto, aunque ni siquiera había habilitado SSL para mi aplicación MVC 5, el navegador aún intentaría acceder a mi sitio usando HTTPS en la URL en lugar de HTTP.

¿La solución?

  1. Navegue a Chrome: // net-internals / # hsts
  2. En la sección eliminar, ingrese "localhost" y elimine el registro de Chrome.
El gato con botas
fuente
1
Sí, los hsts pueden ser la causa de este problema. Esto me ayudó, gracias.
Kosmo
12

Ninguna de las opciones anteriores funcionó para mí. Tuve que hacer lo siguiente:

  1. IIS Express 8.0 desinstalado
  2. Eliminé todas las configuraciones en mi directorio de Documentos para IIS Express
  3. Reinstalado IIS Express 8.0
  4. Eliminé el proyecto en mi máquina local y descargué una versión limpia para TFS
  5. Ejecuté el proyecto; luego se ejecutó a través de SSL y puedo depurar

Obtuve los pasos de este hilo.

Espero que esto ayude.

lopezbertoni
fuente
2
Acabo de desinstalar iis express y lo reinstalo. ahora funciona
Xin
55
En mi caso, fue suficiente para reparar la instalación de IIS (en el Panel de control).
romanoza
¿Y la gente paga dinero a Microsoft por esto? ¿Qué tan increíblemente mal tiene que estar diseñado el software para que la única solución sea una desinstalación y reinstalación completas?
Jez
@Jez - No, es gratis.
Eric Kelly el
6

En mi caso, creé un certificado autofirmado y lo hice funcionar, excepto que recibí un error en el navegador porque el certificado no era de confianza. Entonces, moví el certificado a la carpeta Autoridades de certificación raíz de confianza> Certificados en el complemento Certificados. Funcionó, y luego cerré Visual Studio por el día.

Al día siguiente, comencé mi proyecto y recibí el error mencionado en la pregunta original. El problema es que el certificado con el que configuró IISExpress debe existir en la carpeta Personal> Certificados o HTTPS dejará de funcionar. Una vez que IIS Express se inicia con éxito, puede arrastrar el certificado nuevamente a la ubicación de confianza. Continuará funcionando hasta que reinicie IIS Express.

Como no quiero preocuparme por arrastrar el certificado de un lado a otro cada vez, simplemente coloco una copia del certificado en ambos lugares y ahora todo funciona bien.

moribvndvs
fuente
2
Puede copiar + pegar un certificado dentro del complemento de certificado como si fuera un archivo normal. Me llevó AÑOS descubrirlo.
Simon_Weaver
6

Tengo el mismo problema en Visual Studio 2015. Porque uso el enlace SSL en 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>

Y puedo solucionar el problema con la respuesta de Mr.djroedger. Por reemplazo

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

con

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

en mi web.config, entonces mi código es

<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>
pompón
fuente
4

Estaba teniendo este problema, había configurado mi sitio para requisitos globales https en FilterConfig.cs.

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

Olvidé cambiar la URL del proyecto a https: de este 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. Esto causó los errores que estaba recibiendo.

gsmith
fuente
4

El problema que tuve estaba relacionado con la respuesta de @Jason Kleban, pero tuve un pequeño problema con mi configuración en las Propiedades de Visual Studio para IIS Express.

Asegúrese de que después de haber cambiado el puerto para estar en el rango: 44300 a 44399, la dirección también comience con HTTPS

ingrese la descripción de la imagen aquí

Desarrollador Newteq
fuente
3

Otro problema que me sucedió dos veces:
en IIS Expressapplicationhost.config el orden de los enlaces sí importa. Un enlace podría tener prioridad sobre su enlace SSL, haciendo que no funcione.

Ejemplo:

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

Es posible que haya agregado un enlace similar al segundo para poder acceder a su servicio web desde el exterior localhost. Debido a que este enlace escucha en cualquier dirección, parece anular el enlace SSL aunque se utilizó un puerto diferente.

Elimina la atadura malvada o muévela hacia abajo.

Thibault D.
fuente
Esto me lo arregló. ¡Gracias!
richb
3

Eliminar los directorios IISExpress y vs y usar el rango de puertos SSL de 44300 a 44399 (inclusive) de este artículo funcionó para mí

Luba Karpenko
fuente
gracias por esto, funcionó para mí, excepto que no me pidieron que confiara en el certificado en VS. Soy demasiado vago para hacer algo al respecto, ¡así que ignoraré las advertencias y procederé!
Dave
2

Esto es anecdótico como lo escuchó un compañero de trabajo, pero supuestamente se trata de un problema con Chrome forzar https. Por lo general, inicio en Firefox, así que no había visto este problema antes. Usar Firefox o ie funcionó para mi compañero de trabajo.

Ken Johnson
fuente
1

Mi problema fue causado por Fiddler. Cuando Fiddler se bloquea, ocasionalmente interfiere con la configuración de su proxy. Simplemente iniciar Fiddler parecía arreglarlo todo (tal vez se repare de alguna manera).

Jason
fuente
1

El ' comprobador de instalación de certificados Digicert ' suele ser útil en situaciones como esta.

Pude verificar que el certificado SSL que intentaba era el que esperaba al comparar el número de serie.

ingrese la descripción de la imagen aquí

Para mí, la respuesta de @Jason Kleban fue el problema real, pero esta puede ser una utilidad muy útil para verificar sus afirmaciones básicas sobre qué certificado se está cargando.

Simon_Weaver
fuente
Wow, muchas gracias La única solución que funcionó para mí.
Fernando Silva
1

Si necesita usar un puerto fuera del rango 44300-44399, aquí hay una solución alternativa:

  • Crear un nuevo sitio en IIS (no Express)
  • Enlace HTTPS al puerto que necesita
  • Para el certificado SSL, elija el certificado de desarrollo IIS Express
  • Una vez que se crea el sitio, deténgalo, ya que en realidad no necesita estar ejecutándose

Esto registra el certificado de desarrollo IIS Express con ese puerto y es la forma más fácil que he encontrado para superar el requisito de rango 44300-44399.

Trnelson
fuente
0

Acababa de reconstruir mi computadora. Este hilo me dio las pistas, donde me di cuenta en la configuración del proyecto> Web, el proyecto se configuró para usar HTTP y el puerto HTTP. Al actualizarlo a HTTPS y al puerto HTTPS correcto, todo comenzó a funcionar nuevamente.

Sam
fuente
0

Para continuar con otras respuestas sobre cómo configurar el puerto SSL entre 44300 y 44399, no pude cambiar la propiedad SSL Enabled en Visual Studio, ni establecer una URL SSL específica. Otras respuestas, como reparar IIS Express, no ayudaron. La solución fue ir a la carpeta .vs paralela al archivo sln, abrir la subcarpeta config y luego editar el archivo applicationhost.config. Luego, agregué la línea https manualmente y reinicié VS.

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

En mi caso, simplemente había olvidado que tenía un enlace configurado para (en mi caso) https: // localhost: 44300 en IIS completo. ¡No puedes tener ambos!

James Ellis-Jones
fuente
Puede tener ambos, siempre y cuando ambos no se estén ejecutando al mismo tiempo.
Trnelson
0

En mi caso, la url localhost fue redirigida a https: // localhost cuando estaba depurando. Esto sucedió de un momento a otro, sin cambiar nada. Resolví esto haciendo una recarga dura en el navegador. Aquí el enlace

jaimenino
fuente