viernes, 16 de mayo de 2008

Instalador RPM firmado con clave GPG

Hola, este articulo nos servira para proteger con claves y firmas digitales nuestros softwares instalables, ya sean rpm, deb, etc.
Explico aqui de forma practica su uso.

1.- Objetivo: Generar un instalador que permita incluir una clave de tipo key con firma digital la cual contenga el periodo de tiempo que estará habilitado el software.

2.- Instalación de los paquetes necesarios
Para Linux Red-Hat o distribuciones que manejen gestor de paquetes RPM debe tener actualizados los siguientes paquetes:

Repositorios main, contrib, main-updates

# urpmi rpm rpm-build spec-helper libtool rpmlint
Para satisfacer las dependencias, se instalarán los paquetes siguientes:
..........
¿Efectuar la instalación de los 16 paquetes? (82 MB) (S/n) s
..........

3.- Generación del RPM con clave GPG, firmas y exportación

slack@debian:~$ gpg --gen-key
gpg (GnuPG) 1.4.6; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) [enter]
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 2
Key expires at dom 18 may 2008 12:26:28 CLT
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "

Real name: jorge_salomon
Email address: linSlackware@gmail.com
Comment: ejemplo de clave con expiracion para instalador RPM
You selected this USER-ID:
"jorge_salomon (ejemplo de clave con expiracion para instalador RPM) "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
++++++++++.++++++++++++++++++++.+++++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++.++++++++++>.+++++.+++++....+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++.++++++++++++++++++++..++++++++++...+++++.+++++.+++++.+++++++++++++++++++++++++++++++++++.+++++..++++++++++++++++++++..+++++.+++++...++++++++++.+++++.++++++++++>++++++++++>+++++........................................................................................................>.+++++................+++++^^^
gpg: key FB0A8720 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2008-05-18
pub 1024D/FB0A8720 2008-05-16 [expires: 2008-05-18]
Key fingerprint = CA96 8146 B051 C0CF 8687 665C 9671 45F8 FB0A 8720
uid jorge_salomon (ejemplo de clave con expiracion para instalador RPM)
sub 2048g/1D35BFAD 2008-05-16 [expires: 2008-05-18]


Ya generada la clave a ocupar en el instalador podemos verificar con el siguiente comando:

slack@debian:~$ gpg --list-keys
/home/slack/.gnupg/pubring.gpg
------------------------------
pub 1024D/4F4DACF2 2008-05-15
uid Jorge Salomon
sub 2048g/B823BCC8 2008-05-15

pub 1024D/FB0A8720 2008-05-16 [expires: 2008-05-18]
uid jorge_salomon (ejemplo de clave con expiracion para instalador RPM)
sub 2048g/1D35BFAD 2008-05-16 [expires: 2008-05-18]

Confirmada la correcta generación de la clave, la exportamos a un archivo de texto:

slack@debian:~$ gpg --export -a 'slack' > RPM-GPG-KEY-slack

slack@debian:~$ ls -l
total 224
drwx------ 2 slack slack 4096 2008-05-08 16:21 amsn_received
-rw-r--r-- 1 slack slack 579 2008-04-16 15:05 beryl~
drwx--x--x 25 slack slack 4096 2008-05-09 20:12 desarrollo
drwxr-xr-x 2 slack slack 4096 2008-05-15 17:05 Desktop
drwxr-xr-x 13 slack slack 4096 2008-05-15 17:40 documentos
drwxr-xr-x 3 slack slack 4096 2007-12-17 16:41 drivers_db
drwxr-xr-x 3 slack slack 4096 2008-01-23 12:41 flexdock
drwxr-xr-x 5 slack slack 12288 2008-05-09 10:27 imagenes
drwxr-xr-x 4 slack slack 4096 2008-03-23 14:08 NetBeansProjects
drwxr-xr-x 18 slack slack 4096 2008-05-15 17:05 programas
drwxr-xr-x 3 root root 4096 2008-05-07 21:27 redmine_open_source
-rw-r--r-- 1 slack slack 1690 2008-05-15 17:33 RPM-GPG-KEY-jsalomon
-rw-r--r-- 1 slack slack 3351 2008-05-16 12:36 RPM-GPG-KEY-slack
drwxr-xr-x 10 slack slack 4096 2008-05-16 10:07 software
drwxr-xr-x 4 slack slack 4096 2008-04-28 15:26 uml_workflow
drwxr-xr-x 6 slack slack 4096 2008-01-29 20:02 workspace


Luego se debe importar la clave al RPMDB, este comando debemos ingresarlo como root

slack@debian:~$ su
Password:
debian:/home/slack# rpm --import RPM-GPG-KEY-slack


Verificamos la lista de claves públicas del RPMDB

debian:/home/slack# rpm -q gpg-pubkey --qf '%{name}-%{version} --> %{summary}\n'
gpg-pubkey-4f4dacf2 --> gpg(Jorge Salomon )
gpg-pubkey-fb0a8720 --> gpg(jorge_salomon (ejemplo de clave con expiracion para instalador RPM) )

Ahora debemos configurar el fichero .rpmmacros incluyendo lo siguiente, lo podemos editar con nano:

debian:/home/slack# nano .rpmmacros


%_signature gpg

%_gpg_name fb0a8720

El archivo esta vacio, y debemos incluir las dos lineas anteriores, teniendo la precaución de que el _gpg_name debe tener el valor de la clave que hemos creado anteriormente

Posteriormente firmamos el instalador de la siguiente manera:

debian:/home/slack# rpm --addsign xs4dte-2.1.2-1.i386.rpm
xs4dte-2.1.2-1.i386.rpm

Ahora comprobamos la firma del paquete:

debian:/home/slack# rpm --checksig xs4dte-2.1.2-1.i386.rpm
xs4dte-2.1.2-1.i386.rpm: sha1 md5 OK

y ya tenemos el paquete firmado y con clave gpg con una licencia que durara el tiempo que pasamos para este instalador, en este caso es de 2 días

para más info vayan a: http://www.gnupg.org

Saludos y suerte !!

2 comentarios:

Anónimo dijo...

perfect, gracias

firmando digitalmente pdf dijo...

De Primera Categoría! Gracias por este post - que estaba buscando estas explicaciones largo tiempo. He seguido todas sus instrucciones y funciona muy bien.