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:
|
1 2 3 4 5 6 7 |
País Nombre (2 letra código) [AU]:CH Estado o Provincia Nombre (completo nombre) [Some-State]:Zürich Localidad Nombre (ej, ciudad) []:Old Town Organización Nombre (ej, empresa) [Internet Widgits Pty Ltd]:Example Cloudsigma Empresa Organizativa Unidad Nombre (ej, sección) []:Cloud Technology Común Nombre (e.g. servidor FQDN o SU nombre) []:cloudsigma.com Correo electrónico []:info@cloudsigma.com |
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:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
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:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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):
|
1 |
openssl req -key domain.key -new -out domain.csr |
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:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
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:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
Responda a las preguntas con su información específica de CSR. Opcionalmente, puede agregar la bandera -subj al comando para evitar las preguntas:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
Proporcione la información específica de su CSR en las preguntas. Opcionalmente, puede agregar la bandera -subj al comando para evitar las preguntas:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
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:
|
1 |
openssl req -text -noout -verify -in domain.csr |
Por ejemplo, el comando anterior puede producir una salida como esta:

- Visualización de las entradas del certificado
Ingrese el siguiente comando para ver el contenido de un certificado (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
El comando anterior puede producir una salida como esta:

- 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:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
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:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
El comando le solicitará una contraseña para completar el proceso. Vea la captura de pantalla a continuación:

- Verificación de una clave privada
Para verificar la validez de una clave privada (domain.key), ingrese el siguiente comando en su terminal:
|
1 |
openssl rsa -check -in domain.key |
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:

- 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:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
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:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
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:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
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:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
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:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- 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:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
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:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- 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:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
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:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
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:
|
1 |
openssl version -a |
A continuación se muestra la salida que obtuvimos al ejecutar el comando anterior mientras creábamos este tutorial:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Dic 2020 compilado el: Sáb Dic 19 15:39:47 2020 UTC plataforma: linux-x86_64 opciones: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compilador: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Sembrado fuente: so-específico |
A continuación puede encontrar la captura de pantalla real:

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!
Comentarios
Aún no hay comentarios. Sea el primero.