Los comandos más útiles en OpenSSL
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.
Extrar llave privada de llave encriptada
openssl rsa -in key.pem -out dec.pem