¿Cómo crear un certificado autofirmado para un nombre de dominio para desarrollo?

122

Tengo subdomain.example.comque utilizo para fines de desarrollo. Mi solución de aplicación web contiene una API web, etc., que necesito llamar desde sistemas externos, por lo tanto, no estoy usando localhost.

Ahora necesito probar SSL y necesito un certificado para mi subdomain.example.comnombre de dominio de desarrollo.

Intenté crear un certificado autofirmado como se describe en http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx , pero este certificado solo funciona para localhost. ¿Se puede usar este certificado para mi propósito o tendré que crear un autofirmado para mi subdominio de desarrollo? Si tengo que crear una certificación autofirmada para mi subdominio de desarrollo, ¿qué utilidad o servicio en línea (Gratis) puedo usar para esto?

Moiz Tankiwala
fuente

Respuestas:

133

Con la función de certificado autofirmado de IIS, no puede establecer el nombre común (CN) para el certificado y, por lo tanto, no puede crear un certificado vinculado a su subdominio elegido.

Una forma de evitar el problema es usar makecert.exe, que se incluye con el SDK de .Net 2.0. En mi servidor está en:

C:\Program Files\Microsoft.Net\SDK\v2.0 64bit\Bin\makecert.exe

Puede crear una autoridad de firma y almacenarla en el repositorio de certificados de LocalMachine de la siguiente manera (estos comandos deben ejecutarse desde una cuenta de Administrador o dentro de un símbolo del sistema elevado):

makecert.exe -n "CN=My Company Development Root CA,O=My Company,
 OU=Development,L=Wallkill,S=NY,C=US" -pe -ss Root -sr LocalMachine
 -sky exchange -m 120 -a sha1 -len 2048 -r

Luego puede crear un certificado vinculado a su subdominio y firmado por su nueva autoridad:

(Tenga en cuenta que el valor del parámetro -in debe ser el mismo que el valor CN utilizado para generar su autorización anterior).

makecert.exe -n "CN=subdomain.example.com" -pe -ss My -sr LocalMachine
 -sky exchange -m 120 -in "My Company Development Root CA" -is Root
 -ir LocalMachine -a sha1 -eku 1.3.6.1.5.5.7.3.1

Su certificado debería aparecer en el Administrador de IIS para estar vinculado a su sitio como se explica en la publicación de Tom Hall.

Felicitaciones por esta solución a Mike O'Brien por su excelente publicación en el blog en http://www.mikeobrien.net/blog/creating-self-signed-wildcard

jlmt
fuente
8
Pude hacer que esto funcione. Tuve que usar el símbolo del sistema de Visual Studio 2010 para makecert.exeestar en mi camino. Para los certificados, pensé que sería más seguro y usaría -a SHA512 -len 8192; me llevó una eternidad generarlos. Y como sospechaba que podría, no tuvo ningún impacto en el nivel de encriptación que usó IIS. Por defecto, IIS usa 128 bits, debe hacer cosas de política de grupo para cambiar esto. De otra nota para otros lectores: no cambies los números mágicos después -eku, son obligatorios.
BrainSlugs83
3
Ejecute todos los comandos anteriores desde un símbolo del sistema con privilegios administrativos; de lo contrario, aparecerá el mensaje "Error: Guardar certificado codificado para almacenar error => 0x5".
Giles Roberts
1
También me gustaría compartir un excelente enlace Creación de certificados autofirmados con makecert.exe para el desarrollo . El enlace explica el enfoque paso a paso para crear un certificado raíz, un certificado de servidor y un certificado de cliente. Además, hay una publicación para explicar cómo usarlos.
Vikram Singh Saini
3
Los navegadores como Chrome han comenzado a dejar de funcionar sha1. Sustituya -a sha512y considere agregar -len 2048a la segunda makecertinvocación y todo debería estar bien.
O. Jones
2
Tenga en cuenta que esto ya no parece funcionar (al menos como se muestra arriba) en Windows 10. Tuve que usar el cmdlet de PowerShell, que funcionó sin ningún problema.
DVK
119

Usando PowerShell

Desde Windows 8.1 y Windows Server 2012 R2 (Windows PowerShell 4.0) y versiones posteriores, puede crear un certificado autofirmado con el nuevo New-SelfSignedCertificatecmdlet:

Ejemplos:

New-SelfSignedCertificate -DnsName www.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName subdomain.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName *.mydomain.com -CertStoreLocation cert:\LocalMachine\My

Usando el Administrador IIS

  1. Inicie el Administrador de IIS
  2. En el nivel del servidor, en IIS, seleccione Certificados de servidor
  3. En el lado derecho, debajo de Acciones, seleccione Crear certificado autofirmado
  4. Donde dice "Especifique un nombre descriptivo para el certificado" escriba un nombre apropiado para referencia.
    1. Ejemplos: www.domain.comosubdomain.domain.com
  5. Luego, seleccione su sitio web de la lista en el lado izquierdo
  6. En el lado derecho, debajo de Acciones, seleccione Enlaces
  7. Agregue un nuevo enlace HTTPS y seleccione el certificado que acaba de crear (si su certificado es un comodín, deberá especificar un nombre de host)
  8. Haga clic en Aceptar y pruébelo.
Tom Hall
fuente
77
+1 para la solución PowerShell. Rápido y fácil, y después de hacer eso, el nuevo certificado apareció en mi Administrador de IIS> Conexiones> Sitios> [Mi aplicación]> Editar enlaces> Editar> menú desplegable Certificado SSL.
Jon Schneider
3
Después de seguir las instrucciones anteriores, y luego ver el certificado, las instrucciones no llenaron el campo CN que todavía tenía el nombre localhost.
2015
77
Exactamente. ¡Esto está mal! El "nombre descriptivo" no tiene nada que ver con CN. No sé por qué esta respuesta tiene tantos votos positivos.
c00000fd
25
Esto recibe votos positivos porque el método Powershell está funcionando. (Ver respuesta @DivineOps) Aquí está el comando que utilicé: New-SelfSignedCertificate -FriendlyName *.mydomain.local -DnsName *.mydomain.local, localhost -CertStoreLocation Cert:\LocalMachine\MyEsto crea un certificado en la tienda Personal. Luego, primero exporté el certificado a un archivo y luego lo volví a importar a IIS a través de IIS Manager (para usarlo para mi enlace https) y luego a Trusted Root CAs a través de MMC (para evitar advertencias del navegador).
Anton
3
La -NotAfteropción también es útil para especificar una fecha de vencimiento (sin ella, el valor predeterminado es solo 1 año). Ejemplo que uséNew-SelfSignedCertificate -DnsName *.mydomain.com -FriendlyName *.mydomain.com -NotAfter (Get-Date).AddYears(15) -CertStoreLocation cert:\LocalMachine\My
Ben Amada, el
52

Para crear el nuevo certificado para su dominio específico:

Abra Powershell ISE como administrador, ejecute el comando:

New-SelfSignedCertificate -DnsName *.mydomain.com, localhost -CertStoreLocation cert:\LocalMachine\My

Para confiar en el nuevo certificado:

  • Abra mmc.exe
  • Vaya a Rooteo de consola -> Certificados (computadora local) -> Personal
  • Seleccione el certificado que ha creado, haga clic derecho -> Todas las tareas -> Exportar y siga el asistente de exportación para crear un archivo .pfx
  • Vaya a Rooteo de consola -> Certificados -> Autoridades de certificación de raíz de confianza e importe el nuevo archivo .pfx

Para vincular el certificado a su sitio:

  • Abra el administrador de IIS
  • Seleccione su sitio y elija Editar sitio -> Enlaces en el panel derecho
  • Agregue un nuevo enlace https con el nombre de host correcto y el nuevo certificado
DivineOps
fuente
2
Esto solo funciona en Windows 8.1 y Windows Server 2012 R2 (Windows PowerShell 4.0) o posterior, aunque puede generar el certificado en uno de estos sistemas operativos e importarlo más tarde a otra computadora (acabo de hacerlo para usar este certificado con SSRS instalado en Windows Server 2008 R2).
mprost
2
En lugar de Exportar e Importar para copiarlo en las Autoridades de certificación raíz de confianza, puede simplemente Copiar y pegar
jk7
Copiar / Pegar solo funciona en el mismo servidor. También puede arrastrar y arrastrar el certificado desde la carpeta Personal a las Autoridades de certificación raíz de confianza en el mismo servidor. Si desea que otro host pueda acceder al sitio sin advertencias, deberá exportarlo y hacer que importe el certificado en su TRCA local (no es necesario que incluya la clave privada).
jessewolfe
40

Tuve que abrirme camino a través de certificados autofirmados en Windows combinando partes de las respuestas dadas y más recursos. Aquí está mi propio (y con suerte completo) recorrido. Espero que te ahorre algo de mi propia curva de aprendizaje dolorosa. También contiene información sobre temas relacionados que aparecerán tarde o temprano cuando cree sus propios certificados.

Cree un certificado autofirmado en Windows 10 y versiones inferiores

No use makecert.exe. Ha sido desaprobado por Microsoft.
La forma moderna utiliza un comando Powershell.

Windows 10

Abra Powershell con privilegios de administrador:

New-SelfSignedCertificate  -DnsName "*.dev.local", "dev.local", "localhost"  -CertStoreLocation cert:\LocalMachine\My  -FriendlyName "Dev Cert *.dev.local, dev.local, localhost"  -NotAfter (Get-Date).AddYears(15)

Windows 8, Windows Server 2012 R2:

En Powershell en estos sistemas, los parámetros -FriendlyName y -NotAfter no existen. Simplemente quítelos de la línea de comando anterior.
Abra Powershell con privilegios de administrador:

New-SelfSignedCertificate  -DnsName "*.dev.local", "dev.local", "localhost"  -CertStoreLocation cert:\LocalMachine\My

Una alternativa es utilizar el método para la versión anterior de Windows a continuación, que le permite utilizar todas las características de Win 10 para la creación de certificados ...

Versiones anteriores de Windows:

Mi recomendación para versiones anteriores de Windows es crear el certificado en una máquina Win 10, exportarlo a un archivo .PFX usando una instancia de mmc (consulte "Confiar en el certificado" a continuación) e importarlo en el almacén de certificados en la máquina de destino con el antiguo sistema operativo Windows. Para importar el certificado NO haga clic derecho sobre él. Aunque hay un elemento de "Importar certificado" en el menú contextual, falló en todas mis pruebas para usarlo en Win Server 2008. En su lugar, abra otra instancia de mmc en la máquina de destino, vaya a "Certificados (equipo local) / Personal / Certificados" , haga clic derecho en el panel central y seleccione Todas las tareas → Importar.

El certificado resultante

Los dos comandos anteriores crean un certificado para los dominios localhosty *.dev.local.
La versión Win10 también tiene una duración de 15 años y un nombre para mostrar legible de "Dev Cert * .dev.local, dev.local, localhost".

Actualización: si proporciona varias entradas de nombre de host en el parámetro -DnsName(como se muestra arriba), la primera de estas entradas se convertirá en el Asunto del dominio (Nombre común AKA). La lista completa de todas las entradas de nombre de host se almacenará en el campo Nombre alternativo del sujeto (SAN) del certificado. (Gracias a @BenSewards por señalar eso).

Después de la creación, el certificado estará disponible de inmediato en cualquier enlace HTTPS de IIS (instrucciones a continuación).

Confía en el certificado

El nuevo certificado no forma parte de ninguna cadena de confianza y, por lo tanto, no se considera confiable por ningún navegador. Para cambiar eso, copiaremos el certificado al almacén de certificados para las CA raíz confiables en su máquina:

Abra mmc.exe, Archivo → Agregar o quitar complemento → elija "Certificados" en la columna izquierda → Agregar → elija "Cuenta de equipo" → Siguiente → "Equipo local ..." → Finalizar → Aceptar

En la columna izquierda, seleccione "Certificados (equipo local) / Personal / Certificados".
Encuentre el certificado recién creado (en Win 10 la columna "Nombre descriptivo" puede ayudar).
Seleccione este certificado y presione Ctrl-C para copiarlo al portapapeles.

En la columna de la izquierda, seleccione "Certificados (equipo local) / CA raíz / certificados de confianza".
Presione Ctrl-V para pegar su certificado en esta tienda.
El certificado debe aparecer en la lista de Autoridades raíz de confianza y ahora se considera confiable.

Uso en IIS

Ahora puede ir al Administrador de IIS, seleccionar los enlaces de un sitio web local → Agregar → https → ingrese un nombre de host del formulario myname.dev.local(su *.dev.localcertificado solo es válido para ) y seleccione el nuevo certificado → Aceptar.

Agregar a hosts

Agregue también su nombre de host a C: \ Windows \ System32 \ drivers \ etc \ hosts:

127.0.0.1  myname.dev.local

Contento

Ahora Chrome e IE deberían tratar el certificado como confiable y cargar su sitio web cuando se abra https://myname.dev.local.

Firefox mantiene su propio almacén de certificados. Para agregar su certificado aquí, debe abrir su sitio web en FF y agregarlo a las excepciones cuando FF le advierte sobre el certificado.

Para el navegador Edge puede que se necesite más acción (ver más abajo).

Prueba el certificado

Para probar sus certificados, Firefox es su mejor opción. (Créeme, yo también soy un fanático de Chrome, pero FF es mejor en este caso).

Aquí están las razones:

  • Firefox usa su propio caché SSL, que se purga en shift-reload. Por lo tanto, cualquier cambio en los certificados de sus sitios web locales se reflejará inmediatamente en las advertencias de FF, mientras que otros navegadores pueden necesitar un reinicio o una purga manual del caché SSL de Windows.
  • Además, FF le brinda algunos consejos valiosos para verificar la validez de su certificado: Haga clic en Avanzado cuando FF muestre su advertencia de certificado. FF le mostrará un bloque de texto corto con una o más advertencias posibles en las líneas centrales del bloque de texto:

El certificado no es confiable porque está autofirmado.

¡Esta advertencia es correcta! Como se señaló anteriormente, Firefox no utiliza el almacén de certificados de Windows y solo confiará en este certificado si agrega una excepción. El botón para hacer esto está justo debajo de las advertencias.

El certificado no es válido para el nombre ...

Esta advertencia muestra que hiciste algo mal. El dominio (comodín) de su certificado no coincide con el dominio de su sitio web. El problema debe resolverse cambiando el (sub) dominio de su sitio web o emitiendo un nuevo certificado que coincida. De hecho, podría agregar una excepción en FF incluso si el certificado no coincide, pero nunca obtendría un símbolo de candado verde en Chrome con tal combinación.

Firefox puede mostrar muchas otras advertencias de certificados agradables y comprensibles en este lugar, como certificados vencidos, certificados con algoritmos de firma obsoletos, etc. No encontré ningún otro navegador que me diera ese nivel de comentarios para resolver cualquier problema.

¿Qué patrón de (sub) dominio debería elegir desarrollar?

En el comando New-SelfSignedCertificate anterior, utilizamos el dominio comodín *.dev.local.

Puedes pensar: ¿Por qué no usar *.local?

Razón simple: es ilegal como dominio comodín.
Los certificados comodín deben contener al menos un nombre de dominio de segundo nivel.

Por lo tanto, los dominios del formulario *.localson buenos para desarrollar sitios web HTTP. Pero no tanto para HTTPS, porque se vería obligado a emitir un nuevo certificado coincidente para cada nuevo proyecto que inicie.

Notas secundarias importantes:

  • Los dominios de host válidos SOLO pueden contener letras a través de z, dígitos, guiones y puntos. ¡No se permiten guiones bajos! Algunos navegadores son muy exigentes con este detalle y pueden causarle dificultades cuando se niegan obstinadamente a hacer coincidir su dominio motör_head.dev.localcon su patrón comodín *.dev.local. Cumplirán cuando cambies a motoer-head.dev.local.
  • Un comodín en un certificado solo coincidirá con UNA etiqueta (= sección entre dos puntos) en un dominio, nunca más. *.dev.local coincide myname.dev.local pero NO other.myname.dev.local!
  • Los comodines multinivel ( *.*.dev.local) NO son posibles en los certificados. Por other.myname.dev.locallo tanto , solo se puede cubrir con un comodín del formulario *.myname.dev.local. Como resultado, es mejor no usar una parte de dominio de cuarto nivel. Pon todas tus variaciones en la parte del tercer nivel. De esta manera, se llevará bien con un solo certificado para todos sus sitios de desarrollo.

El problema con Edge

Esto no se trata realmente de certificados autofirmados, sino que está relacionado con todo el proceso:
después de seguir los pasos anteriores, Edge puede no mostrar ningún contenido al abrirlo myname.dev.local.
La razón es una característica de la administración de red de Windows 10 para aplicaciones modernas, llamada "Aislamiento de red".

Para resolver ese problema, abra un símbolo del sistema con privilegios de administrador e ingrese el siguiente comando una vez:

CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe

Puede encontrar más información sobre Edge y aislamiento de red aquí: https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/

Jpsy
fuente
2
Me gustaría señalar aquí que el primer nombre DNS también se guarda como el Nombre del sujeto, que es posible que no desee ser el comodín.
Ben Sewards
@BenSewards: Gracias por señalar eso, Ben. He actualizado la respuesta para incluir el tema / detalles del campo SAN. ¿Ve algún problema al tener un nombre de host comodín en el campo Asunto en lugar del campo SAN?
Jpsy
@Jpsy: esto funciona para mí localmente en el servidor donde se creó el certificado autofirmado, pero no dentro de Firefox o Chrome en mis máquinas (cliente). Entiendo appname.dev has a security policy called HTTP Strict Transport Security (HSTS), which means that Firefox can only connect to it securely. You can’t add an exception to visit this site.que, como dice, no le permite agregar la excepción del cliente, en contra de su instrucción. ¿Es esta una mala configuración dentro de IIS con respecto a la configuración de SSL, Requiere SSL y las opciones de certificados del Cliente?
Código Maverick
@CodeMaverick: ¿Podría haber algún bloqueador de anuncios o software antivirus involucrado en su problema por casualidad? Otra opción podría ser que el certificado no coincida con el nombre de dominio que usa. Recuerde que el * en el CN ​​o SAN del certificado solo puede representar un segmento en el nombre de dominio (que no contiene puntos). Por lo tanto, el CN *.mydomain.compuede ser un certificado válido me.mydomain.compero no para me.at.mydomain.com.
Jpsy
14

Me encontré con este mismo problema cuando quería habilitar SSL en un proyecto alojado en IIS 8. Finalmente, la herramienta que utilicé fue OpenSSL , después de muchos días luchando con los comandos makecert. El certificado se genera en Debian, pero podría importarlo sin problemas en IIS 7 y 8.

Descargue el OpenSSL compatible con su sistema operativo y este archivo de configuración. Establezca el archivo de configuración como configuración predeterminada de OpenSSL.

Primero generaremos la clave privada y el certificado de la Autoridad de Certificación (CA). Este certificado es para firmar la solicitud de certificado (CSR).

Debe completar todos los campos que se requieren en este proceso.

  1. openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem -newkey rsa:4096

Puede crear un archivo de configuración con una configuración predeterminada como esta: ahora generaremos la solicitud de certificado, que es el archivo que se envía a las Autoridades de Certificación.

El Nombre común debe establecer el dominio de su sitio, por ejemplo: public.organization.com .

  1. openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096

Ahora la solicitud de certificado está firmada con el certificado de CA generado.

  1. openssl x509 -req -days 365 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial -in server-csr.pem -out server-cert.pem

El certificado generado se debe exportar a un archivo .pfx que se pueda importar al IIS.

  1. openssl pkcs12 -export -out server-cert.pfx -inkey server-key.pem -in server-cert.pem -certfile root-cacert.pem -name "Self Signed Server Certificate"

En este paso importaremos el certificado CA.

  1. En su servidor debe importar el certificado de CA a las autoridades de certificación raíz de confianza, ya que IIS puede confiar en el certificado que se importará. Recuerde que el certificado que se importará al IIS se ha firmado con el certificado de la CA.

    • Abra el símbolo del sistema y escriba mmc .
    • Haga clic en Archivo .
    • Seleccione Agregar / quitar complemento en ... .
    • Haga doble clic en Certificados .
    • Seleccione Cuenta de computadora y Siguiente -> .
    • Seleccione Equipo local y Finalizar .
    • Ok .
    • Vaya a Certificados -> Autoridades de certificación raíz de confianza -> Certificados , haga clic con el botón derecho en Certificados y seleccione Todas las tareas -> Importar ...

ingrese la descripción de la imagen aquí

  • Seleccione Siguiente -> Examinar ...
  • Debe seleccionar Todos los archivos para examinar la ubicación del archivo root-cacert.pem .
  • Haga clic en Siguiente y seleccione Colocar todos los certificados en la siguiente tienda : Autoridades de certificación raíz de confianza .
  • Haga clic en Siguiente y Finalizar .

ingrese la descripción de la imagen aquí

Con este paso, el IIS confía en la autenticidad de nuestro certificado.

  1. En nuestro último paso, importaremos el certificado a IIS y agregaremos el sitio de enlace.

    • Abra el Administrador de Internet Information Services (IIS) o escriba inetmgr en el símbolo del sistema y vaya a Certificados de servidor .
    • Haga clic en Importar ... .
    • Establezca la ruta del archivo .pfx, la frase de contraseña y seleccione el almacén de certificados en Web Hosting .

ingrese la descripción de la imagen aquí

  • Haga clic en OK .
  • Ahora vaya a su sitio en el Administrador de IIS y seleccione Enlaces ... y agregue un nuevo enlace.

  • Seleccione https como el tipo de enlace y debería poder ver el certificado importado.

  • Haga clic en Aceptar y todo está listo.

ingrese la descripción de la imagen aquí

Joseph
fuente
Quería tener una caducidad más larga con un certificado autofirmado y el SDK de Windows con makecert.exe no estaba disponible en el host de Windows. Un host Linux y esta respuesta proporcionaron la solución.
richk
Me alegra que hayas encontrado útil mi respuesta.
Joseph
¿Dónde poner ese "public.organization.com" en el comando openssl?
The One
2

Otra opción es crear un certificado autofirmado que le permita especificar el nombre de dominio por sitio web. Esto significa que puede usarlo en muchos nombres de dominio.

En IIS Manager

  1. Haga clic en el nodo del nombre de la máquina
  2. Certificados de servidor abierto
  3. En el panel Acciones, elija 'Crear certificado autofirmado'
  4. En 'Especifique un nombre descriptivo ...' nómbrelo * Dev (seleccione 'Personal' de la lista de tipos)
  5. Salvar

Ahora, en su sitio web en IIS ...

  1. Administrar los enlaces
  2. Crear un nuevo enlace para Https
  3. Elija su certificado autofirmado de la lista
  4. Una vez seleccionado, el cuadro de nombre de dominio se habilitará y podrá ingresar su nombre de dominio.

ingrese la descripción de la imagen aquí

patrón de prueba
fuente
Gracias la respuesta más útil hasta ahora. Al menos para usarlo en el desarrollo esto es rápido.
cabaji99
0

Otra forma fácil de generar un certificado autofirmado es usar Jexus Manager,

Jexus Manager

  1. Elija un nodo de servidor en el panel Conexiones.
  2. En el panel central, haga clic en el icono de Certificados de servidor para abrir la página de administración.
  3. En el panel Acciones, haga clic en el elemento de menú "Generar certificado autofirmado ...".

https://www.jexusmanager.com/en/latest/tutorials/self-signed.html

Lex Li
fuente