OpenSSL
Bibliografía
OTNIEL JADAY GARCIA TEJEDOR
OpenSSL Command-Line HOWTO Paul Heinlein <
S/MIME
S/MIME es un estándar para el envío y recepción de datos MIME seguros, especialmente en correo electrónico. Algunos clientes de correo proporcionan esta posibilidad automáticamente pero también se pueden realizar mediante la opción smime. Consulte la página de manual de smime 1) donde hay unos ejemplos variados.
Verificar un mensaje S/MIME firmado
Para verificar un mensaje mime firmado, ponemos:
openssl smime -verify -in msg.txt |
Si el certificado emisor está firmado por una CA, pueden aparecer varios mensajes de cabecera, y también una copia del mensaje junto con una nota sobre la verificación correcta.
En caso contrario, si la firma S/MIME no es correcta o no se reconoce a la autoridad certificadora aparecerán una indicaciones de error.
Muchos clientes de correo envían un copia del certificado público adjunto al mensaje. Desde la línea de órdenes puede ver los datos certificados. Con la opción smime -pk7out pasa mediante una tubería una copia del certificado a la opción pkcs7:
openssl smime -pk7out -in msg.txt | \ openssl pkcs7 -text -noout -print_certs |
Si lo que quiere es extraer una copia del certificado para uso posterior sólo tendría que usar la primera parte de la tubería:
openssl smime -pk7out -in msg.txt -out her-cert.pem |
Ahora puede integrarlo en su infraestructura OpenSSL o tenerlo para cualquier otro uso:
openssl smime -verify -in msg.txt -CAfile /path/to/her-cert.pem |
Cifrar un mensaje S/MIME
Supongamos que alguien le envía su certificado público y le solicita que le cifre algún mensaje. Ha guardado su certificado como her-cert.pem y quiere cifrar el mensaje en my-message.txt.
Si queremos usar el cifrado estándar, simplemente indicamos el fichero y el certificado::
openssl smime her-cert.pem -encrypt -in my-message.txt |
Si el destinatario dispone también de las herramientas SSL necesarias, puede especificar un algoritmo más robusto como triple DES:
openssl smime her-cert.pem -encrypt -des3 -in my-message.txt |
El mensaje cifradojunto con las cabecers se envía de a la entrada estándar, salvo que especifiquemos mediante -out un fichero concreto. También se puede usar la salida estándar para enviar el correo directamente a sendmail:
openssl smime her-cert.pem \ -encrypt \ -des3 \ -in my-message.txt \ -from 'Your Fullname < |
Como firmo un mensaje S/MIME
Si no tiene necesidad de cifrar todo el mensaje y sí quiere firmarlo para asegurar la integridad tenemos que usar una receta similar al cifrado. La principal diferencia es que tiene que tener sus propias llave y certificado, ya que no puede firmar nada con el certificado del recipiente.
openssl smime \ -sign \ -signer /path/to/your-cert.pem \ -in my-message.txt \ -from 'Your Fullname < |
Datos aleatorios
Generar bits aleatorios
Use la opción rand para generar datos binarios o base64-encoded.
# escribe 128 bits aleatorios en base64-a la salida estándar
openssl rand -base64 128 |
# escribe 1024 bits en formato binario en un fichero
openssl rand -out random-data.bin 1024 |
Hashes de contraseñas
Se pueden generar hashes mediante la opción passwd para interactuar con los ficheros tradicionales /etc/passwd, /etc/shadow y de contraseñas de Apache.
Generar el hash cifrado de una contraseña
Puede generar el hash de una forma muy simple:
openssl passwd miclave 1SVGewli74UQI |
Si ya la conoce puede incluir una semilla:
openssl passwd -salt F2 miclave F2y5biqTazL0A |
hash estilo shadow password
openssl passwd -1 miclave $1$fTI7WqzK$nvA95VAzkksmneO3nICMa/ |
La semilla en este formato consiste en los caracteres comprendidos entre el segund y tercer símbolos $.
openssl passwd -1 -salt F2 miclave $1$F2$c8mTmVFjlaUMXv0nOSMzp0 |