OpenSSL en Windows 10: Una Guía Integral de PowerShell

Generar certificados SSL puede ser una tarea desafiante, llena de frustración y pesar. ¡Pero no tiene que ser así! Si tienes Windows 10 y OpenSSL, junto con un poco de ayuda de este tutorial, estarás bien encaminado.

En este artículo, aprenderás cómo instalar OpenSSL en Windows 10. Una vez instalado, luego generarás certificados SSL, solucionarás problemas y depurarás certificados, y convertirás entre formatos.

¡Comencemos a dominar OpenSSL en Windows 10 con PowerShell!

Relacionado: Gestión de Certificados con el Administrador de Certificados de Windows y PowerShell

Prerrequisitos

En este artículo, aprenderás usando un enfoque práctico. Si bien OpenSSL históricamente es una utilidad de sistema operativo Linux, también puedes usarlo con Windows.

Todas las capturas de pantalla en esta guía fueron tomadas de Windows 10 versión 1909 y PowerShell 7.

Instalando OpenSSL en Windows 10 con PowerShell y Chocolatey

Suponiendo que has instalado Chocolatey utilizando las instrucciones de instalación, tu primera tarea es instalar OpenSSL en Windows 10. Para hacer esto, abre tu consola de PowerShell y ejecuta choco install OpenSSL.Light como se muestra a continuación.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

¡Eso es todo! Ahora has instalado OpenSSL con PowerShell.

Configura un Directorio de Trabajo

Este tutorial creará algunos certificados para aprender. Para asegurarte de que todo el trabajo que hagas aquí esté contenido en una carpeta que puedas limpiar más tarde, adelante y crea una.

Este tutorial almacenará todos los certificados y archivos relacionados en la carpeta C:\certs. Puedes crear una carpeta con PowerShell ejecutando el siguiente comando.

New-Item -ItemType Directory -Path C:\certs

Ahora es el momento de configurar OpenSSL.

Configurando OpenSSL

Por defecto, OpenSSL en Windows 10 no viene con un archivo de configuración. Esto es intencional porque hay muchas opciones de configuración que puedes personalizar. Para los propósitos de esta guía, vas a usar una configuración de ejemplo que puedes personalizar más tarde para adaptarla mejor a tus requerimientos de seguridad.

Abre PowerShell y ejecuta el siguiente comando. Este comando descarga un archivo de configuración de ejemplo desde MIT y lo guarda como openssl.cnf en el directorio de trabajo actual.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

Ahora puedes abrir el archivo openssl.cnf y deberías ver algo que se ve como a continuación.

Sample OpenSSL configuration file

El archivo de configuración descargado funcionará tal como está por ahora. No utilices los valores predeterminados en un entorno de producción.

Actualizar Variables de Entorno del Perfil de PowerShell

Para que todo funcione sin problemas, deberías modificar tu perfil de PowerShell en Windows 10. Configurar algunas variables de entorno te permitirá cambiar fácilmente entre diferentes versiones de OpenSSL que puedas tener instaladas.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

A continuación, verás una manera de crear un perfil de PowerShell si aún no tienes uno. Este comando añade la ruta binaria de OpenSSL a tu variable PATH y asigna la ruta del archivo de configuración a OPENSSL_CONF.

# Agregar variables de entorno al perfil de PowerShell
# Comprobar si existe un perfil, ¡si no se encuentra, crear uno!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Editar el perfil para añadir estas líneas
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

Para utilizar las variables de entorno, recarga tu perfil escribiendo . $profile o simplemente cierra y vuelve a abrir PowerShell.

Ahora puedes invocar fácilmente el binario openssl desde cualquier lugar en PowerShell, como se muestra a continuación.

Verifying OpenSSL version in PowerShell

Usando OpenSSL en Windows 10 para generar un CSR y una clave privada

Antes de poder crear un certificado SSL, debes generar una solicitud de firma de certificado (CSR) . Un CSR es un archivo codificado que te proporciona una forma de compartir tu clave pública con una autoridad de certificación (CA). Este archivo contiene información de identificación, un algoritmo de firma y una firma digital. Vamos a crear tu primer CSR y clave privada.

Relacionado: Tu Guía para Certificados X509 para Mortales

Para crear un CSR, ejecuta el siguiente comando. OpenSSL te pedirá que ingreses información de identificación, como se muestra en la siguiente demostración.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

Una vez completado, tendrás un CSR válido y una clave privada que se puede utilizar para emitir un certificado SSL a tu nombre.

La configuración predeterminada del archivo se puede editar aún más para agilizar este proceso si no deseas ingresar datos cada vez que generas un CSR.

Puedes obtener más información sobre las opciones disponibles para CSR y ver configuraciones de muestra en las páginas del manual. OpenSSL también tiene un repositorio activo en GitHub con ejemplos.

Generación de Pares de Claves RSA

También puedes crear pares de claves RSA (pública/privada) con OpenSSL. Para hacerlo, primero crea una clave privada utilizando el subcomando genrsa como se muestra a continuación.

Cuando ejecutas el comando a continuación, OpenSSL en Windows 10 generará una clave privada RSA con una longitud de clave de 2048 bits. Esta clave se genera casi inmediatamente en hardware moderno. La clave resultante se muestra en el directorio de trabajo

# generar una clave privada usando un tamaño de clave máximo de 2048
# los tamaños de clave pueden ser 512, 758, 1024, 1536 o 2048. 
openssl genrsa -out rsa.private 2048

A continuación, genera una clave pública usando la clave privada que acabas de crear con el subcomando rsa. La sintaxis a continuación creará una clave pública llamada rsa.public en el directorio de trabajo a partir de la clave privada rsa.private.

# generar una clave pública usando la clave privada
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

Generando un Certificado Autofirmado

En ocasiones, es posible que necesites generar un certificado autofirmado. Los certificados autofirmados son adecuados para su uso en entornos de laboratorio, pero no es una práctica segura utilizarlos en un entorno de producción.

Vamos a crear un certificado autofirmado antes de pasar a la siguiente tarea. Para hacerlo, introduce el siguiente comando para crear un certificado SSL X509. Este certificado utilizará criptografía SHA256 y será válido por 365 días utilizando una longitud de clave RSA de 2048 bits. El certificado se guardará en el directorio de trabajo.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Ahora estás listo para importar el certificado en un navegador o servidor.

Validación de CSRs, Certificados y Claves con OpenSSL

Revisar la información en un CSR, clave privada, certificado o PKCS#12 puede ahorrarte tiempo al solucionar errores SSL. A veces, se puede haber utilizado una clave incorrecta para crear un certificado, por ejemplo. Es posible que la información de identificación incorrecta esté en el certificado.

Comencemos revisando un CSR usando el comando req y algunos parámetros:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

Detalles como el nombre del país, el nombre de la organización y la dirección de correo electrónico que ingresaste al crear el CSR al principio de esta guía deben coincidir exactamente.

También puedes verificar un certificado usando el subcomando x509 con algunos parámetros:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

Conversión de Certificados con OpenSSL

En ocasiones, una aplicación no utiliza un formato de certificado específico. Puedes encontrarte con este problema en una aplicación llamada HAproxy, por ejemplo, que requiere un certificado PEM cuando puedes tener un certificado formateado en DER (.crt .cer .der).

Para demostrar cómo convertir un certificado, convirtamos el certificado autofirmado creado anteriormente en formato DER (certificate.crt) a PEM. Utiliza el código en el siguiente fragmento de código para hacerlo.

Este comando a continuación utiliza el subcomando x509 con el parámetro -inform, que debería coincidir con el formato del archivo -in, seguido del formato -out.

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

También puedes invertir el orden si deseas convertir de PEM a formato DER, como se muestra a continuación.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

Y por último, pero no menos importante, puedes convertir PKCS#12 a PEM y PEM a PKCS#12. Este es un tipo de archivo que contiene claves privadas y certificados. Para convertirlo al formato PEM, utiliza el subcomando pkcs12.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

También puedes convertir un certificado PEM y una clave privada al formato PKCS#12 utilizando -export con algunas opciones adicionales. A continuación, se muestra cómo exportar un certificado con formato PKCS#12 utilizando tu clave privada mediante SomeCertificate.crt como fuente de entrada. El uso de la opción -certfile con el valor MyCACert.crt te permite validar SomeCertificate.crt.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

Resolución de problemas y depuración

Ahora que puedes crear y convertir CSR, certificados y pares de claves, es el momento de aprender a solucionar problemas y depurarlos. OpenSSL cuenta con comandos que facilitan la tarea de solucionar problemas.

OpenSSL también te permite verificar certificados para la integridad del archivo y probar posibles corrupciones de datos. Utilizando un checksum MD5, puedes usar los siguientes ejemplos de código para probar certificados, claves y CSR:

# Certificados
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Claves pública/privada
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Solicitud de servidor de certificados
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Verificar una conexión SSL externa
openssl s_client -connect www.google.com:443

Una vez que tengas el hash original, puedes compararlo con un hash actual para verificar que el certificado no se haya modificado ni corrompido.

Aquí tienes una muestra de cómo se ve ese código cuando se ejecuta en PowerShell:

Sample troubleshooting command output with OpenSSL in PowerShell

Resumen

En este artículo, has aprendido cómo instalar y configurar OpenSSL en Windows 10, crear una CSR, un par de claves y un certificado SSL. También has aprendido cómo convertir entre diferentes formatos de certificados y realizar algunas soluciones básicas utilizando subcomandos integrados.

Recursos Adicionales

Source:
https://adamtheautomator.com/openssl-windows-10/