Volver al blog

Conceptos esenciales de OpenSSL: trabajando con claves privadas, solicitudes de firma de certificado y certificados SSL

Conceptos esenciales de OpenSSL: trabajando con claves privadas, solicitudes de firma de certificado y certificados SSL

OpenSSL es una biblioteca de criptografía de código abierto que incluye una variedad de comandos utilizados en el Protocolo TLS y la Infraestructura de Clave Pública. OpenSSL fue lanzado en 1998 y está disponible para sistemas Windows, Linux, macOS y BSD. El comando OpenSSL le ayudará a realizar varias tareas, incluyendo la Solicitud de Firma de Certificado (CSR), la generación de claves privadas y la certificación SSL.

OpenSSL es importante porque garantiza una implementación adecuada de SSL. Obtener SSL de la manera correcta es crucial para la seguridad de su sitio web. Además, Google, que es uno de los principales motores de búsqueda, da prioridad a los sitios web con certificados SSL implementados. Algunos navegadores como Chrome y Firefox pueden marcar su sitio web como No seguro si no tiene un certificado SSL adecuado. Por lo tanto, es de suma importancia servir el tráfico de su sitio web a través del protocolo HTTPS cifrado.

Lo primero es lo primero

Este tutorial es una guía estilo hoja de trucos, que incluye algunos, pero probablemente no todos, los comandos de OpenSSL que puede utilizar en escenarios cotidianos.

La primera parte explica todo lo que necesita saber sobre las Solicitudes de Firma de Certificado (CSR). Sin embargo, si ya está familiarizado con esto, puede pasar a cualquier otra sección relevante para lo que está intentando lograr. Cada sección contiene un fragmento de línea de comandos para lograr lo que indica el subtítulo.

¡Empecemos!

Sección 1: Comprensión de las Solicitudes de Firma de Certificado (CSR)

Una solicitud de firma de certificado es un requisito previo al obtener un certificado SSL de una autoridad de certificación (CA). La CSR incluye la clave pública de un par de claves y cierta información adicional. Debe insertarlos en el certificado durante el proceso de firma.

Durante la generación de la CSR, se le solicita que proporcione información de identificación que se conoce como Nombre Distinguido (DN). El DN contiene campos necesarios para el certificado, como el Nombre Común (CN), que es el Nombre de Dominio Completamente Calificado (FQDN) exacto del host que utilizará el certificado. Los otros campos del DN son para información adicional como el país, el estado, el nombre de la localidad y el nombre de la organización o empresa si está generando certificados específicos para su negocio. Puede optar por omitir las solicitudes proporcionando la información desde un archivo o a través de la línea de comandos.

Eche un vistazo a un ejemplo de la solicitud de información de la CSR en la siguiente captura de pantalla:

Puede proporcionar la información en un comando de una sola línea para evitar las solicitudes agregando la bandera -subj como se muestra a continuación, y proporcionando la información para los campos:

El comando anterior toma la misma información que se muestra en el ejemplo del bloque de código de las solicitudes de información de la CSR.

Sección 2: Generación de Solicitudes de Firma de Certificado

En esta sección, cubriremos los comandos de OpenSSL que puede utilizar para generar CSR y claves privadas. Las CSR son necesarias para solicitar certificados SSL a una Autoridad de Certificación (CA).

Generación de una Clave Privada y una Solicitud de Firma de Certificado

Puede utilizar este método si desea que una Autoridad de Certificación emita un certificado SSL para proteger su Apache o Nginx servidor para servir tráfico a través de HTTPS, es decir, HTTP con TLS. El CSR generado con el comando se puede enviar a una CA para solicitar un certificado SSL firmado por una CA. Puede seguir nuestras guías detalladas sobre cómo configurar sus Apache o Nginx servidores en Ubuntu.

Introduzca el siguiente comando en su terminal para generar una clave privada de 2048 bits (domain.key) y CSR (domain.csr) desde cero:

Responda a las preguntas con su información específica de CSR. Opcionalmente, puede añadir la bandera -subj al comando para evitar las preguntas:

La bandera -newkey rsa:2048 especifica que la clave debe generarse utilizando el algoritmo RSA de 2048 bits. La bandera -nodes indica que no hay cifrado de frase de contraseña para la clave privada. Hay una opción -new no incluida pero implícita para indicar que se genera un nuevo CSR.

Generación de una solicitud de firma de certificado a partir de una clave privada existente

Si ya tiene una clave privada, puede utilizar este método para generar un CSR. Luego lo utilizará para solicitar un certificado SSL a una CA. Introduzca el siguiente comando para generar un nuevo CSR (domain.csr) utilizando una clave privada existente (domain.key):

Responda a las preguntas con su información específica de CSR. Opcionalmente, puede añadir la -subj flag al comando para evitar las preguntas:

La bandera -key especifica la clave privada existente (domain.key) que se utilizará para generar un nuevo CSR. La bandera -new indica que se está generando un nuevo CSR.

Generación de una solicitud de firma de certificado a partir de un certificado y una clave privada existentes

Si ya tiene un certificado existente que le gustaría utilizar para generar un CSR, puede usar este método. Este método puede ser útil si usted o su CA pierden el CSR original y necesita generarlo utilizando la información del CSR introducida anteriormente sin tener que volver a introducirla. El comando extrae la información del certificado existente. Introduzca el siguiente comando en su terminal para crear un nuevo CSR (domain.csr) utilizando un certificado existente (domain.crt) y una clave privada existente (domain.key):

La opción -x509toreq indica que está utilizando el X509 certificate para generar el CSR.

Sección 3: Generación de certificados SSL

En algunas situaciones, es posible que desee utilizar un certificado SSL sin la molestia de obtener un certificado firmado por una CA. Esta sección explica cómo puede firmar sus propios certificados. Es válido y gratuito. Estos certificados se denominan self-signed certificates, y son bastante comunes.

Un certificado autofirmado está firmado con su propia clave privada. Tanto los certificados autofirmados como los firmados por una CA funcionan igual de bien para cifrar datos y el tráfico del sitio web. Sin embargo, con los certificados autofirmados, los usuarios suelen recibir una advertencia en sus navegadores de que el certificado no es de confianza. Por lo tanto, puede utilizar certificados autofirmados para sitios web que no intercambian información confidencial con los usuarios, o en servidores que no son de producción. A continuación, puede encontrar los comandos de OpenSSL que puede utilizar para generar certificados autofirmados.

  • Generación de un certificado autofirmado

Puede utilizar este método para generar un certificado SSL para proteger su servidor Apache o Nginx. Esto garantizará que el tráfico se realice con HTTPS, o HTTP sobre TLS, sin tener que acudir a una CA para firmar el certificado:

Responda a las preguntas con su información específica de CSR. Opcionalmente, puede agregar la bandera -subj al comando para evitar las preguntas:

La -x509 bandera indica la creación de un certificado autofirmado. La -days 365 opción especifica el número de días que el certificado será válido. En este caso, es de 365 días. También puede elegir un número diferente de días. El comando genera un CSR temporal para contener la información que debe asociar con el certificado.

  • Generación de un certificado autofirmado a partir de una clave privada existente

Este método le ayudará a generar un certificado autofirmado a partir de su clave privada ya existente. Ingrese el siguiente comando para generar un certificado autofirmado (domain.crt) utilizando una clave privada existente (domain.key):

Proporcione la información específica de su CSR en las preguntas. Opcionalmente, puede agregar la bandera -subj al comando para evitar las preguntas:

La -x509 bandera indica la creación de un certificado autofirmado. La -days 365 opción especifica el número de días que el certificado será válido. En este caso es de 365 días. También puede elegir un número diferente de días. La -new opción inicia la solicitud de información del CSR.

Sección 4: Visualización de certificados

Los certificados y los archivos CSR se codifican y almacenan con la .pem extensión. Significa Privacy-Enhanced Mail (correo con privacidad mejorada). Es un formato de archivo para almacenar y enviar claves criptográficas, certificados y otros datos cruciales. Los archivos PEM no son fácilmente legibles por humanos. En esta sección, encontrará comandos que puede utilizar para ver las entradas de los archivos PEM codificados.

  • Visualización de archivos CSR

Ingrese el siguiente comando para ver y verificar el contenido de un CSR (domain.csr) en su terminal:

Por ejemplo, el comando anterior puede producir una salida como esta:

Viewing CSR files

  • Visualización de las entradas del certificado

Ingrese el siguiente comando para ver el contenido de un certificado (domain.crt):

El comando anterior puede producir una salida como esta:

OpenSSL

  • Verificación de que un certificado fue firmado por una autoridad de certificación

Para verificar si un certificado (domain.crt) fue firmado por un determinado certificado de CA (ca.crt), ingrese el siguiente comando:

 

Sección 5: Claves privadas

Si está buscando los comandos de OpenSSL necesarios para crear y verificar claves privadas, esta sección es para usted.

  • Creación de una clave privada

Para crear una clave privada de 2048 bits protegida por contraseña (domain.key), ingrese el siguiente comando en su terminal:

El comando le solicitará una contraseña para completar el proceso. Vea la captura de pantalla a continuación:

Creating a Private Key

  • Verificación de una clave privada

Para verificar la validez de una clave privada (domain.key), ingrese el siguiente comando en su terminal:

A continuación, deberá proporcionar una contraseña. Si la clave privada está cifrada e introduce la frase de contraseña correcta, la clave no cifrada se mostrará en la terminal. Consulte la captura de pantalla a continuación:

Verifying a Private Key

  • Verificar que una clave privada coincida con un certificado y una CSR

Si desea comprobar si una clave privada (domain.key) coincide con un certificado (domain.crt) y una CSR (domain.csr), introduzca los siguientes comandos en su terminal:

Si observa que la salida de los comandos anteriores es idéntica, entonces es posible que la clave privada, el certificado y la CSR estén relacionados.

  • Cifrar una clave privada

Si tiene una clave privada no cifrada (unencrypted.key) y desea obtener la versión cifrada de la clave (encrypted.key), introduzca el siguiente comando en su terminal:

El comando le solicitará una frase de contraseña para cifrar la clave privada.

  • Descifrar una clave privada

Si tiene una clave privada cifrada (encrypted.key) y desea obtener la versión descifrada de la misma (decrypted.key), introduzca el siguiente comando en su terminal:

El comando le solicitará una frase de contraseña para la clave cifrada. Si introduce la frase de contraseña correcta, se descifrará. La salida se enviará a decrypted.key.

 

Sección 6: Conversión de formatos de certificado

Es posible que note que hasta ahora hemos estado trabajando con X.509 certificados que están codificados con ASCII PEM. Aunque eso está bien, existe una variedad de otros tipos de codificación y contenedores de certificados que puede utilizar. En algunas aplicaciones, es posible que prefiera utilizar ciertos formatos sobre otros. Además, algunos formatos diferentes pueden contener múltiples elementos, como una clave privada, una CSR y un certificado firmado por una CA en un solo archivo. También puede utilizar OpenSSL para realizar conversiones entre varios formatos de certificado. Siga leyendo para conocer algunos de los comandos de OpenSSL para la conversión de formatos de certificado.

  • Conversión de PEM a DER

DER (Distinguished Encoding Rules) es una codificación binaria para X.509 certificados y claves privadas. Para convertir un certificado codificado en PEM (domain.crt) a un certificado codificado en DER (domain.der), introduzca el siguiente comando:

Encontrará la mayoría de los casos de uso del formato de codificación DER en el lenguaje de programación Java.  Siga este tutorial para una configuración rápida de Java en su servidor Ubuntu.

  • Conversión de DER a PEM

Para convertir un certificado codificado en DER (domain.der) a un certificado PEM (domain.crt), introduzca el siguiente comando:

 

  • Conversión de PEM a PKCS7

Es posible que desee agregar certificados PEM, por ejemplo, domain.crt y ca-chain.crt a un archivo PKCS7 (domain.p7b). Aquí tiene el comando para lograrlo:

Puede utilizar la opción -certfile varias veces para especificar los certificados que desea agregar al archivo PKCS7. Los archivos PKCS7 son principalmente relevantes para los almacenes de claves de Java y Microsoft IIS. También conocidos como archivos P7B, son archivos ASCII que pueden incluir certificados y certificados firmados por una CA.

  • Convertir PKCS7 a PEM

Para convertir un archivo PKCS7 (domain.p7b) a un archivo codificado en PEM (domain.crt), introduzca el siguiente comando en su terminal:

 

  • Conversión de PEM a PKCS12

Para combinar una clave privada (domain.key) y un certificado (domain.crt) en un PKCS12 archivo (domain.pfx), introduzca el siguiente comando:

El comando le pedirá que introduzca las contraseñas de exportación, que opcionalmente puede dejar en blanco. Puede encadenar varios certificados al archivo PKCS12 concatenando los certificados en un único archivo PEM (domain.crt). PKCS12 también se conoce como PFX y se utiliza principalmente en Microsoft IIS.

  • Convertir PKCS12 a PEM

Para convertir un archivo PKCS12 (domain.pfx) a un formato codificado en PEM (domain.combined.crt), introduzca el siguiente comando:

El archivo PEM creado por el comando anterior contiene todos los elementos múltiples que contenía el PKCS12.

Sección 7: Comprobación de la versión de OpenSSL

La versión de cualquier software que esté ejecutando puede afectar a las capacidades de las aplicaciones que esté ejecutando. Por lo tanto, es necesario verificar la versión. Lo mismo se aplica a OpenSSL. Algunas opciones de la línea de comandos pueden faltar en una versión y estar disponibles en otra. Para ver la versión de OpenSSL que está ejecutando, introduzca el siguiente comando:

A continuación se muestra la salida que obtuvimos al ejecutar el comando anterior mientras creábamos este tutorial:

A continuación puede encontrar la captura de pantalla real:

OpenSSL

Conclusión

En este tutorial, explicamos qué es OpenSSL, cubrimos las solicitudes de firma de certificados (CSR) y algunos de los comandos cruciales de OpenSSL que puede utilizar en el entorno de su servidor.

¿Nos falta algún comando crucial o tiene problemas con alguno de los comandos en la configuración de su servidor en CloudSigma? No dude en ponerse en contacto con nuestro equipo de atención al cliente 24/7 en el chat en tiempo real para comentarlo.

¡Feliz computación!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.