Instalar un certificado SSL gratuito de Let’s Encrypt en un servidor Windows

por Ferran Ruiz Monferrer


Escrito el 13 de Agosto de 2018



En este artículo vamos a detallar los pasos a seguir para poder instalar correctamente un certificado gratuito SSL (Secure Socket Layer) en nuestro servidor Windows.

Pero empecemos por el principio ¿qué es y para qué sirve un certificado SSL? Un certificado SSL no es más que la certificación (por parte de una entidad autorizada, en este caso 'Let ́s Encrypt') de que nuestro servidor utiliza el protocolo seguro de aplicación 'https' (Protocolo seguro de transferencia de hipertexto (en inglés: Hypertext Transport Protocol Secure o HTTPS ) en lugar de 'http' y que nos brinda una capa de seguridad y privacidad extra en las comunicaciones, cifrando los datos que circulan entre el cliente y nuestro servidor.
Entre las múltiples ventajas de proteger nuestras comunicaciones, hay otras ventajas no tan obvias, como la promesa de Google de mejorar el posicionamiento de todas las webs que utilizan un protocolo seguro en sus comunicaciones.
Este certificado es válido para un solo dominio o alias, aunque puedes seguir este tutorial y añadir un certificado por cada dominio o subdominio al que quieras añadir SSL, sin límite ninguno. Una vez instalado correctamente, veremos que el navegador nos muestra un candado de color verde y que nuestro dominio pasa de ser 'http' a 'https'.
Vamos a ver cómo lo conseguimos.
Para conseguirlo, necesitaremos la biblioteca ACMESharp. ACMESharp incluye características comparables al cliente Let's Encrypt oficial, que es la implementación de referencia para el protocolo ACME del lado del cliente. Y estas son algunas de sus características:

  • -Herramientas y servicios básicos necesarios para implementar el protocolo ACME y su semántica (JSON Web Signature (JWS), operaciones de PKI, persistencia del lado del cliente)
  • -Biblioteca de cliente de protocolo ACME de bajo nivel que puede interoperar con un servidor ACME compatible
  • -Módulo PowerShell que implementa un cliente potente, que funciona igual de bien como una herramienta manual o un componente de un proceso de automatización más grande, para administrar registros, identificadores y certificados de ACME
  • -Contiene una colección de extensiones de proveedor que implementan Handlers e instaladores de Challenges para varios servidores / servicios.
Link al perfil de GitHub de ACMESharp

Guía para crear un certificado SSL con ACMESharp.

Para proceder a la creación del certificado SSL, se deben realizar los siguientes pasos:

  • 1. Ejecutar el Powershell como administrador.

    Ejecutamos nuestro Powershell como administrador, y ahora vamos a escribir los comandos de los siguientes pasos desde el símbolo del sistema de PowerShell.
    Una manera sencilla de abrir un Powershell con permisos de administración es la siguiente: Presiona simultáneamente la tecla "Windows" + tecla "X" para abrir el menú WinX. Haga clic en "Windows Powershell (Administrador)"

  • 2. Guardar el módulo de la librería ACMESharp

    Sustituimos <path> por la ruta dónde queremos guardar la librería. Pegamos el siguiente texto en el PowerShell y pulsamos enter.

       Save-Module -Name ACMESharp -Path <path>
    Nota: Si nos encontramos frente a un sistema Windows Server 2008 o anterior o un Windows 7 o anterior este comando no será válido. Ya que no tendremos el PowerShell actualizado y no nos reconocerá el comando Save-Module. Os adjunto un link de un foro oficial de Microsoft donde solucionan el problema. Link

  • 3. Instalar la libería ACMESharp

    Con este comando instalaremos la librería. Pegamos el siguiente texto en el PowerShell y pulsamos enter.

       Install-Module -Name ACMESharp

  • 4. Importar la librería ACMESharp

    Con este comando importaremos el módulo para Powershell de la librería. Pegamos el siguiente texto en el PowerShell y pulsamos enter.

       Import-Module ACMESharp

  • 5. Inicilialización del baúl de las claves

    Con este comando inicializaremos el baúl de las claves de la librería. Pegamos el siguiente texto en el PowerShell y pulsamos enter.

       Initialize-ACMEVault

  • 6. Registro Let's Encrypt

    Con este comando nos registraremos en Let's Encrypt y aceptaremos los términos y condiciones. Pegamos el siguiente texto en el PowerShell, y sustituiremos "example@example.com" por nuestro correo electrónico y pulsaremos enter.

       New-ACMERegistration -Contacts mailto:example@example.com -AcceptTos

  • 7. Crear un nuevo identificador ACME

    Con este comando crearemos un nuevo identificador ACME, debemos sustituir "myserver.example.com" por el nombre de nuestro dominio y "dns1" por el nombre que le daremos a nuestro identificador. Pegamos el siguiente texto en el PowerShell y pulsaremos enter.

       New-ACMEIdentifier -Dns myserver.example.com -Alias dns1

  • 8. Crear ACME Challenge

    Con este comando crearemos un nuevo ACME Challenge para el identificador DNS que hemos creado anteriormente, debemos sustituir "dns1" por el nombre que le hemos dado a nuestro idetificador Pegamos el siguiente texto en el PowerShell y pulsaremos enter.

       Complete-ACMEChallenge dns1 -ChallengeType dns-01 -Handler manual

  • 9. Recuperar datos

    Gracias a este comando recuperaremos los datos que deberemos introducir en nuestro servidor web. Pegamos el siguiente texto en el PowerShell y pulsaremos enter.

       (Update-ACMEIdentifier dns1 -ChallengeType dns-01).Challenges | Where-Object {$_.Type -eq "dns-01"}
    Os adjunto un ejemplo de respuesta:
    To complete this Challenge please create a new Resource
    Record (RR) with the following characteristics:
    * RR Type:  [TXT]
    * RR Name:  [_acme-challenge.example.com]
    * RR Value: [vNx_fpLgvqegqerg66wrgwegrFB_4]

  • 10. Crear entrada DNS de tipo TXT en nuestro hosting

    Para demostrar que disponemos de la propiedad del dominio para el cual solicitamos el certificado, utilizaremos uno de los métodos que nos proporciona la librería ACMESharp. Debemos crear una entrada DNS de tipo TXT para nuestro dominio. Esto lo haremos mediante el panel de control de nuestro proveedor de hosting.
    Utilizaremos el nombre de entrada y el valor obtenidos mediante el resultado de la ejecución del comando anterior (nombre de entrada: _acme-challenge.example.com, valor de entrada: vNx_fpLgvqegqerg66wrgwegrFB_4).

  • 11. Verificación Challenge

    Informa al servidor de Let's Encrypt para que pueda realizar una verificación.

       Submit-ACMEChallenge dns1 -ChallengeType dns-01

  • 12. Subir el Challenge

    Subiremos el Challengue, será válido si funciona correctamente, inválido si hemos errado o pendiente si el servidor aún no lo ha validado.

       (Update-ACMEIdentifier dns1 -ChallengeType dns-01).Challenges | Where-Object {$_.Type -eq "dns-01"}

  • 13. Solicitar y recuperar el certificado

    Si el Challengue anterior ha sido validado correctamente podremos crear una nueva solicitud de certificado PKI y luego enviarla para su emisión por LE CA.

       New-ACMECertificate dns1 -Generate -Alias cert1
    Sustituiremos "dns1" por el nombre de nuestro identificador, y "cert1" por el nombre que le vayamos a poner a nuestro certificado.
       Submit-ACMECertificate cert1
    Sustituiremos cert1 por el nombre que le hayamos puesto anteriormente a nuestro certificado

  • 14. Recuperar datos del certificado

    Debemos esperar, e ir probando el comando siguiente hasta que nos aparezca el SerialNumber lleno. Sustituiremos "cert1" por el nombre que le hemos dado a nuestro certificado.

       Update-ACMECertificate cert1

  • 15. Exportar el certificado en formato PFX

    Ahora vamos a exportar el certificado en formato PFX a la ruta que especifiquemos. Debemos sustituir en el siguiente comando "nombreCertificado" por el nombre que le hemos dado a nuestro certificado. "Ruta/Para/Guardar" por la ruta absoluta donde vayamos a guardar el certificado. Y "contraseña" por la contraseña que vayamos a poner en nuestro certificado.

       Get-ACMECertificate nombreCertificado -ExportPkcs12 "Ruta/Para/Guardar" -CertificatePassword 'contraseña'

  • 16. Instalar el certificado en nuestro servidor web

    Ahora sólo nos resta asociar el certificado a nuestro sitio web para "https", normalmente el el puerto 443. En IIS, por ejemplo, importaremos el certificado mediante el menú "Certificados" (desde el path indicado en el paso número 15 y con la contraseña utilizada), y posteriormente crearemos el enlace para https, asignandole el puerto y el certificado a utilizar.


    Ahora ya deberíamos tener nuestro certificado para ssl gratuito instalado y funcionando en nuestro servidor. Los certificados emitidos por Let's Encrypt tienen una validez de 3 meses, por lo que se deben renovar cada tres meses (próximamente trataremos este tema en otro post).

    Por favor, para cualquier sugerencia o duda sobre este post, no dudeis en contactarme en el siguiente mail ferran@irenesolutions.com.