¿Cómo puedo crear un certificado autofirmado para localhost?

134

He seguido los pasos detallados en ¿Cómo se usa https / SSL en localhost? pero esto configura un certificado autofirmado para el nombre de mi máquina, y cuando lo busco a través de https: // localhost recibo la advertencia de IE.

¿Hay alguna manera de crear un certificado autofirmado para "localhost" para evitar esta advertencia?

Chris
fuente
¿Instaló el certificado como CA?
vcsjones
Seguí el proceso para instalar un certificado autofirmado en IIS en Win7. Pero eso crea el certificado para "mymachinename", y necesito uno para "localhost".
Chris
1
¡Hola! Considere configurar la respuesta de Auri como la respuesta principal ya que el makecert está en desuso. Enlace a la respuesta: stackoverflow.com/a/44164653/1461602
Tormod Haugene

Respuestas:

81

Aunque esta publicación es etiquetada para Windows, es una pregunta relevante en OS X que no he visto respuestas en ningún otro lado. Estos son los pasos para crear un certificado autofirmado para localhost en OS X :

# Use 'localhost' for the 'Common name'
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -days 365 -keyout localhost.key -out localhost.crt

# Add the cert to your keychain
open localhost.crt

En Keychain Access, haga doble clic en este nuevo certificado localhost. Expanda la flecha al lado de "Confiar" y elija "Confiar siempre". Chrome y Safari ahora deberían confiar en este certificado. Por ejemplo, si desea utilizar este certificado con node.js:

var options = {
    key: fs.readFileSync('/path/to/localhost.key').toString(),
    cert: fs.readFileSync('/path/to/localhost.crt').toString(),
    ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384',
    honorCipherOrder: true,
    secureProtocol: 'TLSv1_2_method'
};

var server = require('https').createServer(options, app);
Ben Flynn
fuente
2
El primer comando, ssh-keygenes innecesario ya que el comando openssl también está creando una nueva clave (y sobrescribiendo la creada por ssh).
Félix Saparelli el
77
También puede automatizar el proceso completo mediante la adición -subj '/CN=localhost'de los opensslargumentos.
Félix Saparelli
8
Para que OS X confíe en él desde la línea de comandos en lugar de hacer clic, puede hacer:sudo security add-trusted-cert -p ssl -d -r trustRoot -k ~/Library/Keychains/login.keychain localhost.crt
philfreo
1
También relevante para Linux. Muchas gracias.
Marcel
1
Seguí todos estos pasos y estoy obteniendo un ERR_SSL_VERSION_OR_CIPHER_MISMATCHChrome 60 y Safari 10.1.2 tampoco me gusta.
styfle
61

Dado que esta pregunta está etiquetada IISy no puedo encontrar una buena respuesta sobre cómo obtener un certificado de confianza, le daré mis 2 centavos al respecto:

Primero use el comando de @AuriRahimzadeh en PowerShell como administrador:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

Esto es bueno pero el certificado no es confiable y dará como resultado el siguiente error. Es porque no está instalado en Trusted Root Certification Authorities.

ingrese la descripción de la imagen aquí

Resuelve esto comenzando mmc.exe.

Luego ve a:

Archivo -> Agregar o quitar complementos -> Certificados -> Agregar -> Cuenta de computadora -> Computadora local. Haz clic en Finalizar.

Expanda la Personalcarpeta y verá su localhostcertificado:

ingrese la descripción de la imagen aquí

Copie el certificado en la Trusted Root Certification Authorities - Certificatescarpeta.

El último paso es abrir Internet Information Services (IIS) Managero simplemente inetmgr.exe. Desde allí, vaya a su sitio, seleccione Bindings...y Add...o Edit.... Establezca httpsy seleccione su certificado del menú desplegable.

ingrese la descripción de la imagen aquí

Su certificado ahora es de confianza:

ingrese la descripción de la imagen aquí

Ogglas
fuente
9
¡Esta debería ser la respuesta aceptada! ¡Funciona! Si te equivocaste con el localhost y el certificado de confianza. Asegúrese de eliminar todos los antiguos certificados de host local (a través de la consola mmc e IIS (servidor administrado por la parte superior)
Tuan Jinn
¡Gracias! Hay tantas respuestas SO y publicaciones de blog sobre este tema, pero muy pocas hablan sobre los problemas de confianza del certificado. Consejo: ¿Quizás debería explicar por qué no utiliza el puerto SSL predeterminado 443? Supongo que es porque este puerto a menudo lo toma algún otro proceso.
HoffZ
Muy buena respuesta, y funciona bien en IIS como 2020. ¡Muchas gracias!
alessandrocb
También funciona para alias en el archivo hosts
Zef
52

Puede usar PowerShell para generar un certificado autofirmado con el cmdlet new-selfsignedcertificate:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

Nota: makecert.exe está en desuso.

Referencia de cmdlet: https://technet.microsoft.com/itpro/powershell/windows/pkiclient/new-selfsignedcertificate

Auri Rahimzadeh
fuente
Esta debería ser la respuesta a partir de 2017.
Tormod Haugene
1
Para aquellos que siguen y no saben cómo instalar el certificado resultante, siga los pasos en este video, ¡funcionó para mí! youtube.com/watch?v=y4uKPUFmSZ0
Eric Brown - Cal
66
¿Dónde se almacenan los archivos clave y CRT?
woojoo666
1
@ woojoo666 con -KeyLocationbandera puede especificar la ubicación.
hamid
46

Después de pasar una buena cantidad de tiempo en este problema, encontré que cada vez que seguía las sugerencias de usar IIS para hacer un certificado autofirmado, descubrí que el Emitido para y Emitido por no era correcto. SelfSSL.exe fue la clave para resolver este problema. El siguiente sitio web no solo proporcionó un enfoque paso a paso para hacer certificados autofirmados, sino que también resolvió el problema Emitido a y Emitido por. Aquí está la mejor solución que encontré para hacer certificados autofirmados. Si prefiere ver el mismo tutorial en forma de video, haga clic aquí .

Un ejemplo de uso de SelfSSL se parecería a lo siguiente:

SelfSSL /N:CN=YourWebsite.com / V: 1000 / S: 2

SelfSSL /? proporcionará una lista de parámetros con explicación.

app.developer.henry
fuente
El artículo de RobBagby.com funcionó perfectamente para mí. Buen hallazgo Henry.
cymorg
¡MEGA! Ese video tiene mala calidad pero tiene todo lo necesario.
tonco
2
El enlace al sitio robbagby está muerto. Vea mi respuesta para 2 tutoriales de YouTube de alta calidad por CodeCowboyOrg
Moses Machua
Respuesta editada para vincular al archivo Wayback del artículo en robbagby.com.
Prometeo
23

Si está tratando de crear un certificado autofirmado que lo permita, http://localhost/mysite aquí hay una forma de crearlo

makecert -r -n "CN=localhost" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.1 -sv localhost.pvk localhost.cer
cert2spc localhost.cer localhost.spc
pvk2pfx -pvk localhost.pvk -spc localhost.spc -pfx localhost.pfx

De http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/32bc5a61-1f7b-4545-a514-a11652f11200

David Burela
fuente
2
a dónde fue mi certificado: o no está en C: \ Windows \ system32
EaterOfCode
2
Por cierto, la herramienta makecert.exe se usa a través del símbolo del sistema de Visual Studio para futuros lectores. También puede usar las herramientas del Kit de recursos de Internet Information Services (IIS) e instalar SelfSSL 1.0. microsoft.com/downloads/en/…
atconway
3
Si bien las respuestas rápidas son excelentes, no siempre ayudan. "El certificado no se puede usar como un certificado de servidor SSL" es un error que veo en IIS7. Op también mencionó advertencias del navegador y no "¿Cómo creo un certificado"?
cmroanirgo
Puede omitir el paso cert2spc, el parámetro debido pvk2pfx -spc acepta tanto .spc como .cer
abatishchev
1
@EaterOfCode Mine estaba en C: \ Windows \ SysWOW64
Bay Sola el
10

Recomendaría la herramienta de Pluralsight para crear certificados autofirmados: http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-programmatic-in-net

Haga su certificado como .pfx e impórtelo a IIS. Y agréguelo como una autoridad confiable de certificación raíz.

cederlof
fuente
1
Después de aletear probando todo tipo de "magia" de PowerShell y otras cosas que simplemente no funcionaron, la herramienta de Pluralsight generó un script de trabajo para mí en 30 segundos, y eso incluye el tiempo que tardó en comer la pizza (+ descargar y extraer la herramienta, quiero decir). Como todavía estoy ejecutando Windows 7 en esta vieja computadora portátil, esta fue la solución perfecta para mí, ¡gracias!
Ade
1

Si y no. Los certificados autofirmados generan ese mensaje de advertencia porque el certificado no fue firmado por una autoridad de certificación de confianza. Hay algunas opciones que puede considerar para eliminar esta advertencia en su máquina local. Vea las respuestas mejor calificadas a esta pregunta para más detalles:

¿Qué debo hacer para que Internet Explorer 8 acepte un certificado autofirmado?

¡Espero que esto ayude!


EDITAR:

Lo siento, inicialmente no sabía que estabas limitado a localhost. Puede intentar seguir las instrucciones en el siguiente enlace para "Generar un certificado autofirmado con el nombre común correcto".

http://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-in-iis-7.html

Phil Klein
fuente
No, el mensaje de advertencia está allí porque la URL ( localhost ) no coincide con el nombre del certificado, que se emite bajo el nombre de la máquina. Si cambio a mymachinename , no obtengo el error. Desafortunadamente, tengo que usar localhost y no el nombre de la máquina por razones que no afectan la pregunta.
Chris
1

podrías probar mkcert.

macos: brew install mkcert

Clark Yu
fuente
0

Si está usando Visual Studio, hay una manera fácil de configurar y habilitar SSL usando IIS Express explicado aquí

Amir Chatrbahr
fuente