OpenSSL – Resumen uso.
¿como cifrar nuestros documentos y demás utilizando algo que todos aquellos que trabajamos con linux tenemos muy a mano, OpenSSL?
Acceder a openssl: Tecleamos en la consola
~# openssl
Nos saldrá un promt con el siguiente formato.
OpenSSL>
Salir de openssl:
OpenSSL> quit
OpenSSL> q
OpenSSL> exit
Ayuda:
OpenSSL> ?
Nos mostrará una lista de los comandos disponibles.
– Cifrado simétrico –
Encriptar
DES:
OpenSSL> enc -des -in entrada.txt -pass pass:contraseña -out salidaDes.txt
AES:
OpenSSL> enc -aes128 -in entrada.txt -pass pass:contraseña -out salidaAes.txt
Desencriptar
DES:
OpenSSL> enc -d -des -in salidaDes.txt -pass pass:contraseña -out salidaDes2.txt
AES:
OpenSSL> enc -d -aes128 -in salidaAes.txt -pass pass:contraseña -out salidaAes2.txt
– Cifrado asimétrico –
Generar llave del algoritmo asimétrico RSA: Vamos a generar una llave privada de 1020 bits
OpenSSL> genrsa -out privada1.key 1024
Cifrar la clave privada con DES para evitar su uso fraudulento:
OpenSSL> genrsa -out privada2.key -passout pass:contraseña -des 1024
Se realiza este cifrado porque la clave privada se genera como un fichero de texto que cualquiera podría leer, para evitar esto la ciframos.
Generar claves públicas derivadas:
OpenSSL> rsa -in privada1.key -pubout -out publica1.key
OpenSSL> rsa -in privada2.key -pubout -out publica2.key -passin pass:contraseña
Encriptar
OpenSSL> rsautl -pubin -encrypt -in entrada.txt -out salidaRsa.txt -inkey publica1.key
Desencriptar:
OpenSSL> rsautl -decrypt -in salidaRsa.txt -out salidaRsa2.txt -inkey privada1.key
– Funciones hash –
Generar:
OpenSSL> dgst -md5 -out entrada.hsh entrada.txt
– Firma digital –
Generar un par de claves RSA como hemos visto anteriormente:
OpenSSL> genrsa -out privada.key 1024
OpenSSL> rsa -in privada.key -pubout -out publica.key
Firmar el archivo digitalmente:
OpenSSL> dgst -c -sign privada.key -out firmado.sig entrada.txt
El archivo “firmado.sig” contendrá la firma digital en formato binario.
Verificar firma:
OpenSSL> dgst -c -verify publica.key -signature firmado.sig entrada.txt
OpenSSl mostrará un “Verified OK” si todo ha sido correcto, o un “Verification Failure” si algo ha fallado.
Conversión de firmas binarias a texto: Como ya he dicho antes las firmas generadas tienen un formato binario, con lo cual para su envió por correo, por ejemplo, es interesantes pasarlas a texto. Así que vamos a generar una versión en base64.
OpenSSL> base64 -in firmado.sig -out firmado.b64
Como puedes observar, el fichero generado es legible y fácilmente agregable a cualquier texto.
Conversión de firmas en texto a binarias: Para verificar las firmas que nos han llegado en modo texto tendremos que pasarlas a modo binario antes.
OpenSSL> base64 -d -in firmado.b64 -out firmado1.sig
– Certificados digitales –
Crear certificado y archivo de configuración de la autoridad certificadora (“CA”):
Generar un par de claves RSA como hemos visto anteriormente:
OpenSSL> genrsa -out CAprivada.key 1024
OpenSSL> rsa -in CAprivada.key -pubout -out CApublica.key
Crear el archivo de configuración:
Crear el archivo “CAconfig.conf” con el siguiente contenido:
[ req ]
default_bits = 1024
default_keyfile = CAprivada.key
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca
dirstring_type = nobmp
[ req_distinguished_name ]
countryName = Identificador del País (2 letras)
countryName_default = MX
countryName_min = 2
countryName_max = 2
localityName = Localidad (ej., ciudad)
organizationalUnitName = Nombre de unidad organizacional (ej., oficina)
commonName = Nombre común (ej., TU nombre)
commonName_max = 64
emailAddress = Dirección de correo electrónico
emailAddress_max = 40
[ req_attributes ]
challengePassword = Contraseña para “challenge”
challengePassword_min = 4
challengePassword_max = 20
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints = CA:true
Crear el certificado de la autoridad:
OpenSSL> req -new -key CApriv.key -out ca.cer -config CAconfig.cnf -x509 -days 3650
Generar claves para un usuario:
OpenSSL> genrsa -out privadaUser.key 1024
OpenSSL> rsa -in privadaUser.key -pubout -out publicaUser.key
Generar un requerimiento del certificado para este usuario:
OpenSSL> req -new -key privadaUser.key –out req.pem -config CAconfig.cnf
Firmar el requerimiento y generar el certificado del usuario:
OpenSSL> x509 -inform PEM -outform PEM -keyform PEM -CAform PEM -CAkeyform PEM –in req.pem -out certUser.cer -days 365 -req -CA ca.cer -CAkey CAprivado.key -sha1 –CAcreateserial -text
Bueno, hasta aquí la chuleta de hoy. También debéis saber que OpenSSL permite la creación de de certificados digitales para sitios web, pero como esto da por si solo para un post completo, lo dejaremos para otro día si a alguien le interesa.
Espero que la chuleta os sirva de ayuda. Si alguien tiene alguna duda o algo que aportar, como siempre os animo a dejarlos en los comentarios.