PDF de programación - Usando OpenSSL en el mundo real. Quítate el miedo a usar OpenSSL

Imágen de pdf Usando OpenSSL en el mundo real. Quítate el miedo a usar OpenSSL

Usando OpenSSL en el mundo real. Quítate el miedo a usar OpenSSLgráfica de visualizaciones

Actualizado el 20 de Marzo del 2021 (Publicado el 7 de Septiembre del 2018)
835 visualizaciones desde el 7 de Septiembre del 2018
31,4 KB
15 paginas
Creado hace 17a (06/07/2006)
Usando OpenSSL en el mundo real. Quítate el miedo a usar OpenSSL.

Toni de la Fuente Díaz

Blyx.com

6 de Julio de 2006

OpenSSL es una herramienta libre muy potente que nos ayuda a implementar
los protocolos y algoritmos de SSL (Secure Socket Layer) y TLS Transport
Layer Security). OpenSSL incluye una API criptográfica de propósito general y
una utilidad de línea de comandos muy potente. OpenSSL posee una licencia
muy parecida a la de Apache.

La información y los comandos mostrados en este documento son genéricos,
será valido para cualquier SO en el que esté correctamente instalado OpenSSL
(Linux, Unix, Windowze, etc). Recuerda la web del proyecto OpenSSL es
http://www.openssl.org

Hay una cita muy buena que dice: “Las palabras son enanos y los ejemplos son
gigantes” o algo así. Entonces vamos al lío, veamos que podemos hacer con
OpenSSL.

Todas las opciones de OpenSSL:

$ openssl help
openssl:Error: 'help' is an invalid command.

Standard commands
asn1parse ca ciphers crl crl2pkcs7
dgst dh dhparam dsa dsaparam
enc engine errstr gendh gendsa
genrsa nseq ocsp passwd pkcs12
pkcs7 pkcs8 rand req rsa
rsautl s_client s_server s_time sess_id
smime speed spkac verify version
x509

Message Digest commands (see the 'dgst' command for more details)
md2 md4 md5 mdc2 rmd160
sha sha1

Cipher commands (see the 'enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc
aes-256-ecb base64 bf bf-cbc bf-cfb
bf-ecb bf-ofb cast cast-cbc cast5-cbc
cast5-cfb cast5-ecb cast5-ofb des des-cbc
des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx idea idea-cbc
idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc
rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb
rc4 rc4-40 rc5 rc5-cbc rc5-cfb
rc5-ecb rc5-ofb

Vemos tres ayudas: Standard Commands, Message Digests y Cipher
commands. Para ver la de estas tres secciones de forma independiente puedes
usar los comandos:

$ openssl list-standard-commands

$ openssl list-message-digest-commands
$ openssl list-cipher-commands

Comprobación y verificación de código:

Hoy en día, gracias a Internet, podemos intercambiar gran cantidad de datos.
Algo muy importante en cuanto a distribución de código fuente es comprobar la
integridad de dicho código para confiar en la integridad de lo que nos estamos
descargando. Para conseguir esto se hace una “huella digital” del archivo o
archivos en cuestión. Esta huella digital es publicada junto con el archivo
(tar.gz, zip, etc…) para poder comprobar su integridad.

OpenSSL soporta varios tipos de “huellas digitales” o digest algorithms, por
ejemplo: MD2, MD4, MD5, SHA, SHA1, MDC2 y RIPEMD-160. Cada algoritmo
puede ser invocado directamente o como opción del commando openssl dgst.

Vamos a ver unos ejemplos usados para sacar un digest MD5 del archivo
/etc/secure/data:

$ openssl dgst -md5 /etc/secure/data
MD5(/etc/secure/data)= f268fc3e92ef844117365a3368b8fe45

$ openssl md5 /etc/secure/data
MD5(/etc/secure/data)= f268fc3e92ef844117365a3368b8fe45

OpenSSL puede combinarse con el comando find para hacer “huellas digitales”
(fingerprints) de muchos archivos a la vez:

$ find /etc -type f | xargs openssl md5 > /etc/secure/md5_sigs.txt

El anterior comando creará un archivo MD5 hash de todos los archivos del
directorio /etc. Estos finger prints deben ser almacenados como solo lectura y
en un lugar seguro.

Cifrando (encriptando) datos:

Cifrar es el proceso de convertir datos (generalmente texto plano) a un formato
alternativo (texto cifrado) que sea diferente al original. El proceso de cifrado de
datos generalmente requiere una clave y usa una serie de algoritmos para
realizar la transformación de texto plano a texto cifrado.

Los algoritmos de clave simétrica (algoritmos de clave compartida) usan la
misma clave para cifrar y descifrar datos. Los algoritmos de clave pública
(algoritmos de clave asimétrica) usan diferentes claves para el cifrado y el
descifrado. Los algoritmos de clave pública toman su nombre por una de las
claves que se utilizan, la clave pública, que puede ser distribuida a otras
personas, los datos que son cifrados con una clave pública sólo pueden ser
descifrados con la clave privada asociada.

OpenSSL soporta varios algoritmos de clave simétrica como: DES, 3DES,
IDEA, Blowfish y AES. Cada algoritmo de clave simétrica puede ser invocado
desde la línea de comandos pasando el nombre del algoritmo en el comando

openssl. Veamos un ejemplo para cifrar un archivo llamado passwd con
Blowfish:

$ openssl bf -e -in /etc/secure/passwd -out /etc/secure/passwd.enc.bf
enter bf-cbc encryption password:
Verifying - enter bf-cbc encryption password


The encrypted version of passwd will be placed in /etc/secure/passwd.enc.bf.
The following example utilizes 3DES and the enc command to encrypt the file
sensitive_data. The encrypted contents are placed in
/etc/secure/sensitive_data.enc.3des:

$ openssl enc -e -3des -in /etc/secure/sensitive_data \
-out /etc/secure/sensitive_data.enc.3des
enter bf-cbc encryption password:
Verifying - enter bf-cbc encryption password:

En ocasiones se envían archivos cifrados por mail para intercambiar datos de
forma segura, esto puede ser un problema a la hora de incluir estos datos en
un mail, para resolver este problema podemos usar el estándar base64 que es
soportado por OpenSSL y representa el binario cifrado por texto en ASCII. Por
ejemplo, para cifrar con AES-128 y codificar como base 64 podemos usaríamos
el siguiente comando:

$ openssl enc -base64 -e -aes128 -in /etc/secure/data \
-out /etc/secure/data.enc.aes128.b64
enter bf-cbc encryption password:
Verifying - enter bf-cbc encryption password:

Si el transporte utilizado para envío de datos cifrados no es seguro es
altamente recomendable crear una firma digital o una huella digital del archivo
cifrado para asegurarnos de que no haya sido modificado durante la
transferencia.

Descifrando datos:

Para descifrar datos que han sido cifrados previamente usaremos la opción –d
tras el algoritmo de cifrado en el comando openssl. El siguiente ejemplo
muestra como descifrar el archivo /etc/secure/sensitive_data.enc.3des que fue
cifrado con el algoritmo 3DES:

$ openssl enc -des3 -d -in /etc/secure/sensitive_data.enc.3des \
-out /etc/secure/sensitive_data

Este comando dejará el fichero descifrado en el archivo
/etc/secure/sensitive_data. Si quieres ver el contenido del archive en el terminal
puedes usar el siguiente comando:

$ openssl enc -des3 -d -in /etc/secure/sensitive_data.enc.des3 | more

Generar contraseñas:

Podemos usar OpenSSL para generar contraseñas a través del comando
passwd. Esta opción puede ser usada para automatizar el aprovisionamiento

de usuarios o la actualización de contraseñas. El siguiente ejemplo muestra
como generar el MD5 de la contraseña “blah”:

$ echo blah | openssl passwd -stdin -1

La opción "-1" indica que usaremos MD5 como algoritmo y la opción “-stdin”
indica que le pasamos la contraseña a través de la entrada estándar. Si tu
sistema operativo no soporta MD5 las contraseñas puede ser creadas con
CRYPT:

$ echo blah | openssl passwd -stdin -crypt -salt GH

Este comando generará una contraseña crypt de “blah” con “GH” como salt.

Certificados Digitales:

Un certificado digital es un “carnet de conducir” electrónico que se usa para
identificar a un cliente o a un servidor. Las CAs (Certificate Authorities) son las
responsables de expedir y generar los certificados digitales de forma que
identifiquen y sean identificados como una autoridad fiable y de confianza para
los solicitantes del certificados y los usuarios.

Un certificado contiene mucha información e incluye:

-La versión del certificado.
-Un número de serie único que identifica el certificado.
-Un atributo (Issuer) que identifica a la organización o entidad que ha

generado dicho certificado.

-Rango de fechas en las que el certificado es válido.
-Un atributo (subject) que identifica el sitio para el cual el certificado ha

sido generado.

-Y una firma digital usada por clientes y servidores para verificar la

autenticidad del certificado y garantizar que el usuario del certificado es
realmente quien dice ser.

Cuando una organización quiere solicitar un certificado a una Autoridad de
Certificación (CA) necesitará enviar una petición de firma de certificado (CSR =
certificate-signing request). El CSR contiene la clave pública, el common name
(www.ejemplo.com) identificador único de un sitio y la información local que
identifica a la organización solicitante. El siguiente ejemplo muestra como
generar un CSR:

$ openssl req -new -outform PEM -keyform PEM -keyout secret.key \
-out cert.csr -newkey rsa:1024

Generating a 1024 bit RSA private key
.............++++++
..............................................++++++
writing new private key to 'secret.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be
incorporated into your certificate request.
What you are about to enter is what is called a Distinguished

Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:Georgia
Locality Name (eg, city) []:Atlanta
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example
  • Links de descarga
http://lwp-l.com/pdf13402

Comentarios de: Usando OpenSSL en el mundo real. Quítate el miedo a usar OpenSSL (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad