Los comandos más útiles en OpenSSL

Author
By Darío Rivera
Posted on 2020-01-01 in OpenSSL
Tags   OpenSSL 1.1

Hace algunas semanas hice una introducción acerca de la criptograma simétrica y asimétrica. A mi personalmente, me hubiera gustado leer un artículo introductorio totalmente dirigido a dummies acerca de esto dado que cuando comencé solo encontraba artículos que ya daban por hecho que el lector sabía el significado de una llave privada, una llave pública, un certificado, etc. De esta forma, si llegaste aquí y aún no tienes claro los conceptos básicos de criptografía, te invito a que revises cada uno de los siguientes artículos.

- Criptografía simétrica en OpenSSL - Algoritmos de cifrado
- Criptografía asimétrica en OpenSSL - Llave pública
- Criptografía asimétrica en OpenSSL - Llave privada
- Criptografía asimétrica en OpenSSL - Llave encriptada
- Infraestructura de llave pública (PKI)

Dicho esto, ahora tienes una lista de los comandos que considero más útiles en OpenSSL.

Codificar el contenido de un archivo a base64

openssl enc -base64 -in message.txt

Encriptar el contenido de un archivo

openssl enc -ALG -in message.txt -out encrypted.bin

Debes reemplazar ALG por el algoritmo de cifrado. El anterior comando te solicitará una contraseña. Para ver la lista de algoritmos de cifrado puedes ejecutar el comando openssl help.

Desencriptar el contenido de un archivo

openssl enc -ALG -d -in encrypted.bin -pass pass:PASS

Debes reemplazar ALG por el algoritmo de cifrado y PASS por el password con el que se cifró el contenido. Para ver la lista de algoritmos de cifrado puedes ejecutar el comando openssl help.

Generar una llave privada

openssl genrsa -out key.pem [bits]

En el anterior comando debes reemplazar [bits] por el valor en bits deseado.

Convertir llave PEM a DER / NET

openssl genrsa -in key.pem -outform [OUTF] -out key.der 1024 [bits]

En el anterior comando debes reemplazar [bits] por el valor en bits deseado, y [OUTF] por el formato de salida de la llave (DER/NET).

Extraer llave pública de llave privada

openssl rsa -in key.pem -pubout -out pub-key.pem

Encriptar el contenido de un archivo con llave pública

openssl rsautl -encrypt -inkey pub-key.pem -pubin -in message.txt -out message.enc

Este tipo de cifrado asegura la confidencialidad del mensaje.

Desencriptar el contenido de un archivo con llave privada

openssl rsautl -decrypt -inkey key.pem -in message.enc -out message.dec

Este comando desencripta el mensaje del punto anterior.

Encriptar el contenido de un archivo con llave privada

openssl rsautl -inkey key.pem -in message.txt -sign > message.enc

Este tipo de cifrado asegura la autenticidad del mensaje.

Desencriptar el contenido de un archivo con llave pública

openssl rsautl -inkey pub-key.pem -pubin -in message.enc -out message.dec

Este comando desencripta el mensaje del punto anterior.

Encriptar una llave privada no encriptada

openssl rsa -in key.pem -ALG -out enc-key.pem

Debes reemplazar ALG por el algoritmo de cifrado. El anterior comando te solicitará una contraseña. Para ver la lista de algoritmos de cifrado puedes ejecutar el comando openssl help.

Crear una llave privada + certificado

openssl req -new -x509 -keyout cakey.pem -out cacert.pem

Leer información ingresada en un certificado

openssl req -text -in usercert-req.pem -noout

Firmar certificado de usuario con la entidad de confianza

openssl ca -in usercert-req.pem -out usercert.pem

Este comando requiere una configuración previa de la PKI en el sistema.

Convertir certificado PEM a P12 (formato instalable en browser)

openssl pkcs12 -export -in usercert.pem -inkey userkey.pem > usercert.p12

Verificar si un certificado ha sido generado por una llave privada

openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5

Si la salida de los dos comandos es la misma, entonces el certificado fue generado con la llave privada.


Si te ha gustado este artículo puedes invitarme a tomar una taza de café

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.