Está en: » Notas y recortes »

Cifrar un documento con un certificado mediante openssl

Cifrar un documento con un certificado mediante openssl

Anteriormente ya vimos cómo podemos pedir un CSR para enviar a una entidad certificadora y cómo podemos autofirmar el certificado. Vamos a ver como podemos usar openssl para cifrar un documento extrayendo la clave pública de un certificado para luego cifrar el documento y usar la clave privada para descifrarlo.

 

Siguiendo el nombre de los ficheros de los posts anteriores, vamos a suponer que:

Primero de todo deberemos extraer la clave pública el certificado, creando el ficheopub.key:

$ openssl x509 -inform pem -in cert.crt -pubkey -noout > pub.key

A continuación generamos un documento a cifrar, por ejemplo:

$ echo systemadmin.es > datos.txt

Mediante la clave pública ciframos el documento, que vamos a guardar comodatos.ssl:

$ openssl rsautl -encrypt -inkey pub.key -pubin -in datos.txt -out datos.ssl

Podemos comprobar que los datos se han cifrado mediante el comando file:

$ file datos.txt
datos.txt: ASCII text
$ file datos.ssl
datos.ssl: data

O bien mediante hexdump:

$ hexdump -C datos.ssl
00000000  94 b4 8d 68 a2 63 f4 cc  f7 f6 aa 09 86 70 dc 3f  |.´.h¢côÌ÷öª..pÜ?|
00000010  29 c8 ea 21 e6 61 7c 24  6e e5 85 d6 5d 1b 44 6d  |)Èê!æa|$nå.Ö].Dm|
00000020  e5 41 de 05 73 92 f9 6f  b1 de ca f6 e1 2f d8 52  |åAÞ.s.ùo±ÞÊöá/ØR|
00000030  a6 ef 71 d7 03 04 fe 83  c3 96 26 4b f1 9b a1 c2  |¦ïq×..þ.Ã.&Kñ.¡Â|
00000040  9b db 8e f0 76 03 3e 68  d6 d2 26 a9 54 3d 76 73  |.Û.ðv.>hÖÒ&©T=vs|
00000050  d3 eb 82 75 b9 47 73 1e  8f b2 e6 b8 c7 b2 4c bf  |Óë.u¹Gs..²æ¸Ç²L¿|
00000060  d0 9f ad ea fb 19 a1 b4  40 44 d7 9b 94 1f f6 0e  |Ð.­êû.¡´@D×...ö.|
00000070  ae 65 1b 07 b9 91 ee a7  f8 e2 0f 1f 82 c2 db 96  |®e..¹.î§øâ...ÂÛ.|
00000080  04 7e 9c 27 0a f0 e1 ab  cb f6 48 a6 94 0e e3 3a  |.~.'.ðá«ËöH¦..ã:|
00000090  99 1a 63 8e cb dd 27 8c  db 16 56 0c cf 32 da 38  |..c.ËÝ'.Û.V.Ï2Ú8|
000000a0  d1 78 aa c4 c6 35 b5 9c  ad c3 4f 3b 6e 42 31 2e  |ÑxªÄÆ5µ.­ÃO;nB1.|
000000b0  6b e7 47 3c 61 93 aa 82  29 cd 16 ee 5a ba 04 27  |kçG<a.ª.)Í.îZº.'|
000000c0  40 8b 7b 86 17 21 1b 95  ff 73 fa 62 f5 79 7b b1  |@.{..!..ÿsúbõy{±|
000000d0  ef a5 3e f5 04 89 40 55  72 5e 88 65 7e 5f 2c 9c  |ï¥>õ..@Ur^.e~_,.|
000000e0  26 b0 6a 57 7e ae 3b 3f  5d ae 2d fd 97 ca e8 96  |&°jW~®;?]®-ý.Êè.|
000000f0  48 41 3c 2c 51 29 4e 94  03 fb dc 1a 23 98 4d cc  |HA<,Q)N..ûÜ.#.MÌ|
00000100

Para descifrar el documento deberemos usar la clave privada (privkey.pem) y guardamos el documento recuperado en el fichero datos.recuperados:

$  openssl rsautl -decrypt -inkey privkey.pem -in datos.ssl -out datos.recuperados

Y podremos comprobar que los datos recuperados son los mismos:

$ cat datos.recuperados
systemadmin.es

Este mismo procedimiento nos puede servir para verificar que cierta clave privada corresponde a algún certificado. En el caso que la clave privada no sea la correcta obtendremos el siguiente mensaje:

$ openssl rsautl -decrypt -inkey priv.key.2 -in datos.ssl -out datos.recuperados
RSA operation error
140238622533448:error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02:rsa_pk1.c:190:
140238622533448:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:rsa_eay.c:653:

vía

Comentarios

Deje su comentario

Previsualización de comentario
  1. Anónimo dice: