S/MIME con OpenSSL

Se utilizará S/MIME con OpenSSL para enviar documentos en forma segura. Para ello se debe generar un par de claves RSA de 1024 bits que será el par de claves del cliente de correo S/MIME (pública y privada).


Paso 1: Generar clave privada
Con el comando siguiente se genera la clave privada para el envio de correos electronicos.

# openssl genrsa -out correo-key.pem –des 1024


Paso 2: Requerimiento de clave publica
Con el comando siguiente se hace el requerimiento para la la clave publica.

# openssl req -new -key correo-key.pem -out correo-csr.pem -config openssl.cnf -sha1 -outform PEM genrsa -out correo-key.pem –des 1024


Paso 3: Verificacion del Requerimiento
Con el comando siguiente se hace la verificacion del requerimiento para la la clave publica.

#openssl req -in correo-csr.pem -verify -text –noout


Paso 4: Edición de openssl.cnf
Se debe editar algunas caracteristicas de este fichero para que permita la correcta configiracion del envio de correos electronicos de forma segura.

[ CA_default ]
default_days = 60
default_md = sha1 

Adicione al final del archivo/fichero openssl.cnf la sección requerida para generar certificados de correo electrónico:

[proteccion_de_correo]
basicConstraints = critical,CA:FALSE
nsCertType = client, email
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = emailProtection


Paso 5: Generar la clave publica
Con el comando siguiente se hace el requerimiento para la la clave publica.

# openssl ca -verbose -policy policy_anything -out correo-cert.pem -days 60 -config openssl.cnf -in correo-csr.pem -extensions proteccion_de_correo -passin pass:sistemas


Paso 6: Proceso de firmado
Con el comando siguiente se hace el requerimiento para la la clave publica.

# openssl smime -sign -signer /etc/ssl/correo-cert.pem -inkey /etc/ssl/correo-key.pem -out mensaje.sig -in mensaje.txt correo-cert.pem



Mensaje generado para enviar a través del protocolo seguro.



Paso 7: Proceso de Cifrado del MSN
Con el comando siguiente se hace el requerimiento para la la clave publica.

# openssl smime -encrypt -des3 -out mensaje.msg -in mensaje.sig -from 'acarvaja@mvaonline.com' -to 'armando_carvajal@yahoo.com' -subject 'Prueba de correo seguro' correo-cert.pem otro-destinatario.pem



Paso 8: Proceso de Descifrado del MSN
Con el comando siguiente se hace el requerimiento para la la clave publica.

# openssl smime -decrypt -in mensaje.msg -inkey /etc/ssl/correo-key.pem -recip /etc/ssl/correo-cert.pem


Para un correcto uso del estándar S/MIME es aconsejable usar claves privadas separadas para la firma y el cifrado ya que así aumenta considerablemente el nivel de seguridad teniendo en cuenta la falencia que tiene el estándar en cuenta la seguridad en el canal de comunicación.