Conceptos básicos para Firma Electrónica

Comandos OPENSSL de uso frecuente

La herramienta de aplicación inmediata de criptografía es OPENSSL. Para facilitar el aprendizaje de los conceptos básicos, es indispensable realizar los siguientes ejercicios. La criptografía es mucho mas extensa. A continuación se revisan las operaciones básicas:

Requerimientos:

  • Tener instalado OPENSSL
  • Contar con un certificado válido y su llave privada
  • Tener los certificados de verificación de servicios OCSP

Convertir certificado y llave de Formato DER a PEM, que es el que usa OPENSSL

C:\\firma64\\bin>
> openssl pkcs8 -inform DER -in ABCD1234.key -out ABCD1234.key.pem -passin pass:micontraseña

C:\\firma64\\bin>
> cat ABCD1234.key.pem

 -----BEGIN PRIVATE KEY-----
 MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALfaT/ZGfyGjwrdW
 yT+ffNALAxzjmOL5AYa52P8xn8I3th1xzEnRCjgfmQC0AeI9I1+bJBZQwZDrYPFX
 +JO8PkIzCR3pUUPDeZCV+gfJGESWXQG34agrm2c2cThhtp/ND4375G4NDpaJR9g9
 ynAkwu5S2Su7Di5vAYmuYPRzipN5AgMBAAECgYBI8mr1qUT6APLaMaoJ/2rTVPs4
 NCnOLMRpQ0YRAwyDT/2HM0a+Jx3p5MedWs7AiEeHwJOR8xrKOEovmBr96xu8FZAo
 kUzLA9toxng4oEW1+8BX0HfrPgD3UPQ9LRrtKH1RZrEmSRzqt1Bo2tHZ7ZXSnzr8
 +/9tj9ieWuGaM4FwgQJBAO1JPt3JoiytYylifseSrwO4KmRfPYxzDbu6tVOBiUKE
 SQsHpXF59jC7c8NmdejIRwhhlLzDK3E2awQ2saX+GskCQQDGWkJyF3a8tOC+Fsp6
 9PBR1LjCYHbAZHC7674fSZe2rK8ys1OT0hmu93wkrECSmRjfUVwIGrxt766kpvyW
 UlsxAkAZ5Cce7jRq6ZRrXJr2zdOY9Uxy3U2K+Lbj6BCHBxhiEKsjr/bmdedeE+Yi
 yRhOiSPvDy66lhU0ajqtIAasVRi5AkAynEEr/1SqnbRijEopyWmwV4i1AAwM1xP0
 vxgJv6tYTwN8+kivBQLMpBUm/lSTk0DHamkDIF9H5co39OuqJ2VhAkBZkuGBz+QU
 l+uagHFs6LNbknhMULb03xCmVmV5KVi6CR5NzjNJfvsBlCH7rBM1qW66GbBbIlRo
 AABfzQGQQTiG
 -----END PRIVATE KEY-----

Extraer solo la llave pública del certificado

C:\\firma64\\bin>
>openssl x509 -inform DER -outform PEM -in ABCD1234.cer -out ABCD1234.cer.pem

C:\\firma64\\bin>
>openssl x509 -pubkey -noout -in ABCD1234.cer.pem > ABCD1234.pub.pem

C:\\firma64\\bin>
>cat ABCD1234.pub.pem
 -----BEGIN PUBLIC KEY-----
 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC32k/2Rn8ho8K3Vsk/n3zQCwMc
 45ji+QGGudj/MZ/CN7YdccxJ0Qo4H5kAtAHiPSNfmyQWUMGQ62DxV/iTvD5CMwkd
 6VFDw3mQlfoHyRhEll0Bt+GoK5tnNnE4YbafzQ+N++RuDQ6WiUfYPcpwJMLuUtkr
 uw4ubwGJrmD0c4qTeQIDAQAB
 -----END PUBLIC KEY-----

Convertir de CER a PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

Extraer la cadena original (XML-SAT)

El siguiente ejercicio, es ilustrativo para el proceso de firmado y validación de certificados, ya que se basa en el protocolo desarrollado por el SAT y no necesita tener instalada toda la infraestructura de Firma Electrónica.

.C:\\firma64\\bin<br>
λ  xsltproc sat_co_v3_0.xslt sat_cf_v3_0.xml > sat_cadena_original_v3_0.txt
C:\\firma64\\bin
λ cat sat_cadena_original_v3_0.txt
 ||3.0|2010-03-06T20:38:12|ingreso|PAGO EN UNA SOLA EXHIBICION|488.50|488.50|ABC740101GZ1|EMPRESA PLUS SAPI|AV. RIO MIXCOAC|No. 0|ACACIAS|BENITO JUAREZ|MEXICO, D.F.|Mexico|03240|AV. UNIVERSIDAD|1858|OXTOPULCO|DISTRITO FEDERAL|Mexico|03910|ABCD8001019Q8|JUAN PEREZ PEREZ|AV UNIVERSIDAD|16 EDF 3|DPTO 101|COPILCO UNIVERSIDAD|COYOACAN|DISTRITO FEDERAL|Mexico|04360|1.0|CAPSULAS|SOFTMICINA 100MG 10|244.00|244.00|1.0|BOTELLA|CLORUTO 500M|137.93|137.93|1.0|TABLETAS|SEDETEC 125MG 10|84.50|84.50|IVA|0.00|0.00|IVA|16.00|22.07||

.Aplicar el algoritmo de firmado RSAwSHA1

C:\\firma64\\bin
λ xsltproc sat_cadenaoriginal_3_0.xslt sat_cfdv30.xml | openssl dgst -sha1 -sign ABCD1234.key.pem | openssl enc -base64 -A -out sat_cadena_original_v3_0.signed.b64.txt
C:\\firma64\\bin
λ cat sat_cadena_original_v3_0.signed.b64.txt
gfgshFsvLvZwfhMdbB36kVNT6qS2USdWC9NVRgLXQz1JPHiEaDqfFNFz1TOisATf9DouqYv4fJe8rnVe/gdRc0Bdl07+s0/p6eHP/TTWFi2fSMCmiZ6Tu1RDRFQr2TMoC5KWUX5Xn9nUgEKXJnGGaZifPBDWvsZQnA0jKM5qzX8=

.Decodificar la cadena firmada de Base64 a binario, para poder comparar

.C:\\firma64\\bin
λ base64 --decode sat_cadenaoriginal.signed.b64.txt > sat_cadenaoriginal_v3_0.signed.txt
C:\\firma64\\bin
λ cat sat_cadenaoriginal_v3_0.signed.txt
 --- NO LEGIBLE ---
C:\\firma64\\bin
λ openssl dgst -sha1 -verify ABCD1234.pub.pem -signature sat_cadenaoriginal_v3_0.signed.txt sat_cadena_original_v3_0.txt
 Verified OK

Toda la secuencia de comandos

openssl pkcs8 -inform DER -in ABCD1234.key -out ABCD1234.key.pem -passin pass:micontraseña
openssl x509 -inform DER -outform PEM -in ABCD1234.cer -out ABCD1234.cer.pem
openssl x509 -pubkey -noout -in ABCD1234.cer.pem > ABCD1234.pub.pem
xsltproc sat_co_v3_0.xslt sat_cf_v3_0.xml > sat_cadena_original_v3_0.txt
openssl dgst -sha1 -sign ABCD1234.key.pem sat_cadena_original_v3_0.txt  > sat_cadenaoriginal_v3_0.signed.txt

xxd -p sat_cadenaoriginal_v3_0.signed.txt
openssl dgst -sha1 -verify ABCD1234.pub.pem -signature sat_cadenaoriginal_v3_0.signed.txt sat_cadena_original_v3_0.txt

base64 sat_cadena_original_v3_0.txt > sat_cadena_original_v3_0.txt.b64.
openssl base64 -in sat_cadenaoriginal_v3_0.signed.txt >  sat_cadena_original_v3_0.txt.b64

.