studio - Conexión SSL/restablecimiento de conexión con IISExpress
this project is configured to use ssl (16)
Estoy utilizando el nuevo Visual Studio 2013 con IISExpress por primera vez (servidor de desarrollo de ASP.net utilizado anteriormente en VS2010). Me estoy encontrando 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 del cliente que no tiene. Código de error: ERR_SSL_PROTOCOL_ERROR
Actualicé mi Properies -> archivo web para que Project Url use 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
Asegúrese de eliminar cualquier certificado ''localhost'' previo, ya que podría entrar en conflicto con el generado por IIS Express. Tuve el mismo error (ERR_SSL_PROTOCOL_ERROR) y tardé muchas horas en descubrirlo 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 vuelva a crear.
Aquí se muestra 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 Express de IIS". Si no, elimínelo. O si es múltiple, elimine todo.
En Visual Studio, seleccione proyecto y en la pestaña de propiedad, active SSL = true. Guardar, compilar y ejecutar. IIS Express generará un nuevo certificado ''localhost''.
Nota: Si no funciona, intente lo siguiente: asegúrese de deshabilitar el proyecto IIS Express en VS y 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.
El '' comprobador de instalación del certificado Digicert '' a menudo es útil en situaciones como esta.
Pude verificar que el certificado SSL que se intentaba era el que esperaba al comparar el número de serie.
Para mí @Jason Kleban la respuesta fue el problema real, pero esta puede ser una utilidad muy útil para verificar tus afirmaciones básicas sobre qué certificado se está cargando.
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) SIEMPRE solicita una URL usando HTTPS. Por lo tanto, aunque ni siquiera había activado 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?
- Surf a chrome: // net-internals / # hsts
- En la sección de eliminación, ingrese "localhost" y elimine el registro de Chrome.
En mi caso, creé un certificado autofirmado y lo tuve funcionando, excepto que recibí un error en el navegador porque el certificado no era de confianza. Por lo tanto, moví el certificado a la carpeta Entidades emisoras de certificados de confianza> Certificados en el complemento de 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 a la ubicación de confianza. Continuará funcionando hasta que reinicie IIS Express.
No queriendo preocuparme por arrastrar el certificado una y otra vez, simplemente coloco una copia del certificado en ambos lugares y ahora todo funciona bien.
En mi caso, simplemente había olvidado que tenía una configuración de enlace para (en mi caso) https: // localhost: 44300 en IIS completo. ¡No puedes tener ambas cosas!
Estaba obteniendo ERR_CONNECTION_RESET porque mi número de puerto de la aplicación configurada de Visual Studio 2013 / IIS 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 funcione.
Me di cuenta de esto después de revisar el resultado netsh http show sslcert > sslcert.txt
y hacer clic en algo que leí recientemente sobre los números de los puertos.
Estaba teniendo este problema, había configurado mi sitio para global requiere https en FilterConfig.cs.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new RequireHttpsAttribute());
}
Me olvidé de 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/ en ENABLE SSL parte 4. Esto causó los errores que estaba recibiendo.
Esto es anecdótico, escuchado por un compañero de trabajo, pero supuestamente este es un problema con Chrome forzando https. Normalmente lanzo Firefox, así que no había visto este problema antes. Usar firefox o, por ejemplo, funcionó para mi compañero de trabajo.
Estoy resumiendo los pasos que me ayudaron a resolver este problema:
- 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 utilizar SSL. Para más detalles sobre esto, refiérase here
- Ejecute el siguiente comando como administrador en el símbolo del sistema. Esto generará los enlaces de Certificado SSL en la computadora. De esta lista, averigüe el certificado utilizado por IIS express para el puerto correspondiente:
netsh http show sslcert> sslcert.txt
- Busque los elementos a continuación en el 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 aplicación : {214124cd-d05b-4309-XXX-XXXXXXX}
- Busque también en la consola de administración express de IIS (RUN (Ctrl + R) -> inetmgr.exe) y busque si el certificado correspondiente existe en los Certificados del servidor.
(Haga clic en ServerRoot -> en la sección IIS () -> Abrir los certificados del servidor)
- Si su servidor local usa de manera predeterminada un certificado diferente al que figura en el Paso 3, continúe con los pasos siguientes
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 será su certificado predeterminado vinculado con su servidor 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)
Mi problema fue causado por Fiddler. Cuando Fiddler se bloquea ocasionalmente se equivoca con la configuración de tu proxy. Simplemente el lanzamiento de Fiddler parecía arreglar todo (tal vez se repara de alguna manera).
Ninguna de las opciones anteriores funcionó para mí. Tenía que hacer lo siguiente:
- Desinstalado IIS Express 8.0
- Eliminado todas las configuraciones en mi directorio de documentos para IIS Express
- Reinstalado IIS Express 8.0
- Eliminé el proyecto en mi máquina local y descargué una versión limpia para TFS
- Ejecuté el proyecto, luego ejecuté SSL y puedo depurar
Obtuve los pasos de este hilo.
Espero que esto ayude.
Otro problema que me sucedió dos veces:
En applicationhost.config
IIS Express, el orden de los enlaces sí importa. Un enlace podría tener prioridad sobre su enlace SSL, por lo que no funciona.
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 un servidor localhost
externo. Debido a que este enlace escucha en cualquier dirección, parece anular el enlace SSL aunque se utilizó un puerto diferente.
Retire el enlace malvado o moverlo hacia abajo.
Para seguir con otras respuestas sobre cómo configurar el puerto SSL entre 44300 y 44399, no pude cambiar la propiedad SSL habilitada en Visual Studio, ni establecer una URL SSL específica. Otras respuestas, como la reparación de IIS Express no ayudaron. La solución era 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" />
Tengo un problema similar 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>
Yo acababa de reconstruir mi computadora. Este hilo me dio las pistas, donde me di cuenta en la configuración del proyecto> Web, que el proyecto estaba configurado para usar HTTP y el puerto HTTP. Al actualizarlo a HTTPS y al puerto HTTPS correcto, todo comenzó a funcionar nuevamente.
Si está utilizando URLRewrite para forzar las 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" />
en la sección de reescritura del archivo web.config. Se detendrá la reescritura para 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 usando SSL, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx podría ayudar. Es para VS2010, pero debería ser suficiente para VS2013 también.