Manejo de certificados digitales X509 v3 a través del software libre OpenSSL.
Se utiliza un ejemplo real de sucesiones de ordenes de línea de comandos para que el lector pueda realizar ejercicios prácticos.
Sólo tendrás que ir copiando las ordenes de este tutorial en la consola de la maquina y disponer de un certificado además de una copia del software OpenSSL.
OpenSSL es un software que tiene tantas utilidades como la navaja suiza, ideal para la gestión de los certificados digitales.
Indice
1.-Exportar Certificado para openSSL.
2.-Firmar documento
3.-Cifrado asimétrico
4.-Verificar firma
5.-Extraer los certificados a formato .DER
1.-Exportar Certificado para openSSL.
Despues de exportar el certificado desde el almacen de certificados de Mozilla Firefox en formato .p12
Pasos para convertir un certificado emitido por la FNMT al formato OpenSSL
Lo pasamos a formato manejable por openSSL, en este caso al formato de tipo texto .txt y le damos la extension .pem
Pasar de pkcs12 a formato pem muy importante el parametro -clcerts para que coja nuestro certificado y no el raiz.
c:>openssl pkcs12 -in antonio_fnmt.p12 -out antonio_fnmt.pem -clcerts -passin
pass:Redmoon3632 -passout pass:Redmoon3632
Ver datos del certificado por consola
c:>openssl x509 -in antonio_fnmt.pem -noout -subject
Borrar la pass phrase de la clave privada de un certificado y pasar la clave privada a un archivo .key
openssl rsa -in antonio_fnmt.pem -out antonio_fnmt.key
Extaer la clave publica para realizar la verificaciones
openssl rsa -in antonio_fnmt.pem -out publica_antonio_fnmt.pem -pubout
2.-Firmar documento
openssl dgst -sign antonio_fnmt.pem -out firmado.sig entrada.txt
Verificar documento
openssl dgst -verify publica_antonio_fnmt.pem -signature firmado.sig entrada.txt
3.-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:redmoon2010 -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:redmoon2010
Firmar el archivo digitalmente:
OpenSSL> dgst -c -sign privada1.key -out firmado.sig entrada.txt
El archivo firmado.sig contendrá la firma digital en formato binario.
4.-Verificar firma
OpenSSL> dgst -c -verify publica1.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 envio por correo electrónico las convertimos 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 fichero de texto.
5.-Extraer los certificados a formato .DER
c:>openssl pkcs7 -in antonio.pem -print_certs -out certs.pem
c:>openssl pkcs7 -in antonio.pem -outform DER -out antonioPKCS7.der
Espero que esta información ayude a adentraros en este tema.