¿Cómo restauro un certificado SSL IIS Express faltante?

134

Después de configurar HTTPS en IIS Express, de acuerdo con artículos como este y este , no puedo cargar un sitio de IIS Express con HTTPS. En Chrome , solo obtengo:

Esta página web no está disponible (con el código de error "ERR_CONNECTION_RESET")

... y en IE solo obtengo:

Internet Explorer no puede mostrar la página web

... cuando sigo las instrucciones en esos artículos.

Parece que esto tiene que ver con el hecho de que el "Certificado de desarrollo IIS Express" que IIS Express instala automáticamente se ha eliminado. ¿Cómo hago para reinstalar este certificado?

Chris Simmons
fuente
2
También me pasó tratando de ejecutar IISExpress en el puerto 443 (o en realidad en cualquier puerto fuera del rango 44300-44399)
Gerardo Grignoli
Nota: la respuesta aceptada a esta pregunta es aplicable incluso cuando el certificado de host local IIS Express está presente y parece estar bien.
haymansfield
Para Visual Studio 2017, consulte stackoverflow.com/questions/44142037/…
RickAndMSFT

Respuestas:

193

Después de ir a Agregar o quitar programas y elegir la opción "Reparar" en IIS Express, el certificado se ha reinstalado y ahora puedo iniciar sitios de IIS Express usando HTTPS.

Reparación de IIS Express

El certificado está de vuelta:

Certificado de desarrollo IIS Express

Y ahora puedo iniciar el sitio IIS Express usando HTTPS:

¡Éxito!

Chris Simmons
fuente
1
También funciona para mí, pero en mi caso el certificado estaba allí. No estoy seguro de por qué, pero eso resultó en el mismo error. Así que eliminé el certificado, y 'reparar' lo reinstalé nuevamente, y listo. Muchas gracias.
Darius
37
Nota para usuarios de Windows 10: la reparación solo se realiza en el Panel de control, no en la aplicación Agregar o quitar programas. Brillante idea msft.
Chris Weber
1
Una forma mucho más rápida es iniciar Jexus Manager y generar un nuevo certificado y luego vincularlo a su sitio. jexusmanager.com Por supuesto, todavía no repara los enlaces de certificados rotos y veré cómo hacer que sea una función de un solo clic.
Lex Li
La reparación funciona pero tuve que eliminar cualquier certificado existente usando MMC. El problema con el que me encontré fue que no los estaba eliminando como administrador de localMachine. ¡Asegúrese de ejecutar MMC con permisos elevados!
ranieuwe
66
Nota para los usuarios de VS2019: "Reparar" no funcionará porque el instalador de Visual Studio no coloca el archivo MSI donde el Panel de control espera que esté. Sin embargo, hay un _package.json archivo en ese mismo directorio y contiene la URL del archivo MSI. Puede ejecutarlo manualmente o copiarlo donde el Panel de control lo espera.
Chris R. Donnelly
156

Para Visual Studio 2015, IIS Express 10, Windows 10, estas opciones no me funcionaron. IIS Express 10 no tenía una opción de reparación.

Logré resolver el problema usando el IisExpressAdminCmd.execomando disponible en C:\Program Files (x86)\IIS Express.

Desde un símbolo del sistema elevado, ejecute:

cd C:\Program Files (x86)\IIS Express
IisExpressAdminCmd.exe setupsslUrl -url:urlToYourSite -UseSelfSigned

Reemplazar urlToYourSite con su url.

p.ej

cd C:\Program Files (x86)\IIS Express
IisExpressAdminCmd.exe setupsslUrl -url:https://localhost:44387/ -UseSelfSigned

Después de eso cerré IIS Express y reinicié mi sitio desde Visual Studio y me solicitó que confiara automáticamente en el certificado autofirmado.

Espero que ayude.

Bernie White
fuente
3
Esto funcionó para mí tratando de ejecutar IISExpress en el puerto 443. +1
Gerardo Grignoli
Esta solución funcionó muy bien para mí. Windows 10, Visual Studio 2015, IIS Express 10.
Glenn
1
Si alguien aquí tiene problemas para obtener un puerto específico utilizado por IIS Express, es posible que desee verificar si alguien tiene un sitio registrado en IIS que usa ese puerto. Ese fue mi día hoy.
Chris Marisic
2
En Windows 10, IIS Express tiene una opción de reparación. Debes pasar por el Panel de control. La respuesta aceptada funcionó para mí.
joerage 01 de
1
En caso de que esté cansado de usar la línea de comandos, puede usar Jexus Manager para hacer lo mismo, blog.lextudio.com/…
Lex Li
40

A veces, este error se debe a un certificado diferente instalado para localhost. Si ese es el caso, no hay necesidad de restaurar el certificado IIS Express. En su lugar, puede hacer lo siguiente para decirle a IIS Express que use su certificado existente:

  1. Abra el complemento Certificados MMC como se describe aquí
  2. Encuentre su certificado localhost, por ejemplo, en Personal ... Certificados y obtenga su huella digital:
    1. Abra el cuadro de diálogo de propiedades para el certificado localhost y busque la propiedad Thumbprint
    2. Pegue el valor de la huella digital en el Bloc de notas (o lo que sea) y elimine los espacios y los caracteres especiales al principio
  3. Encuentre el valor de puerto de su proyecto IIS Express:
    1. Vaya a las propiedades del proyecto en Visual Studio y busque el valor "SSL URL", por ejemplo, " https: // localhost: 44300 / MyApp ".
    2. En este ejemplo, 44300 es el número de puerto. Si el suyo es diferente, cambie ese valor en los comandos posteriores.
  4. Use los siguientes comandos en un símbolo del sistema administrativo (no Powershell):

netsh http delete sslcert ipport=0.0.0.0:44300

netsh http add sslcert ipport=0.0.0.0:44300 certhash=your_cert_hash_with_no_spaces appid= {123a1111-2222-3333-4444-bbbbcccdddee}

El Guid en el comando anterior se puede reemplazar con uno que genere. No corresponde a ningún valor existente de IIS Express.

Para obtener más información, consulte Manejo de errores de enlace de URL en IIS Express .

explunit
fuente
2
Una forma más visual es usar Jexus Manager, blog.lextudio.com/… , entonces no tiene que recordar los detalles como el hash de certificado.
Lex Li
si obtiene "El parámetro es incorrecto". error: use este appid primero y luego certhash. Ejemplo: netsh http add sslcert ipport = 0.0.0.0: 44300 appid = {C21B9F4D-2A5D-4160-81C8-FBCC3EFC335E} certhash = your_cert_hash_with_no_spaces
gmsi
36

También tenga en cuenta que para que IIS Express funcione con SSL, el puerto utilizado debe estar en el rango de 44300 a 44399 ( http://www.iis.net/learn/extensions/using-iis-express/running-iis-express- sin privilegios administrativos ).

Entonces, si está usando IIS Express en Visual Studio, asegúrese de que el puerto seleccionado esté en el rango requerido: vs configuración para iis express

Shiraz
fuente
3
Pude usar un puerto fuera de este rango después de usar el comando en la respuesta de Bernie White sin ningún problema. Windows 10 / Visual Studio Community 2015 / .Net Core 1.0.1 / IIS Express 10.0
Ryan Thomas el
1
¡Gracias! Esto resolvió el problema para mí. Extraño que Visual Studio no advierta sobre eso.
Erwin Mayer, el
44
44300-44399 es solo el rango de puertos predeterminado con un certificado asignado. Puede crear fácilmente una asignación de certificados similar llamando netsh, o simplemente usar Jexus Manager, blog.lextudio.com/…
Lex Li
12

Con el nuevo Chrome 58, nada de las respuestas a continuación ayudará. Acabo de pasar 1 hora desinstalando / reinstalando certificados y tratando de averiguar dónde está el problema.

Aparentemente, Chrome 58 rechazará el certificado porque "missing_subjectAltName"

La solución es la frase de contraseña "badidea" o si necesita abrir ventanas emergentes para iniciar sesión, debe usar:

Chrome: // flags / # allow-insecure-localhost

La fuente es y el voto a favor pertenece a: https://stackoverflow.com/a/38926117/2089232 :)

milánio
fuente
1
Ver también blog.lextudio.com/…
Lex Li
2

Quería agregar esto, porque es ridículo, pero quizás ayude a alguien. Tenga en cuenta que nunca antes había abierto las propiedades de mi proyecto, así que no tengo idea de cómo sucedió esto (no lo cambié yo mismo ni tuve la oportunidad de hacerlo), pero en Proyecto> Propiedades> Web, mi URL SSL aparece como mi URL habitual pero como http en lugar de https (anteriormente había sido https porque funcionaba antes). Pasé por todos los pasos enumerados en esta página, desinstalé VS, luego IIS, y finalmente noté el error que debería haber sido https: // mySSLURL (pero faltaba el s en https). Una vez que cambié http a https, todo volvió a funcionar.

Elijah Tate
fuente