Kurztipp: RPM GPG-Key für EL5 und 6 erstellen

Wenn RPM-Pakete für Enterprise Linux 5 und 6 erstellt und signiert werden sollen, müssen bei der Erstellung und Verwendung des GPG-Keys einige Dinge beachtet werden, damit auch EL5-Systeme die signierten Pakete verwenden können.

Wird der GPG-Key mit den Standard-Einstellungen erstellt und ein RPM-Paket damit unter EL6 signiert, ergibt sich auf EL5-Systemen die folgende Fehlermeldung:

1# rpm -v --checksig mypackage.rpm
2Header V4 RSA/SHA1 signature: BAD, key ID xxxxxxxx

In einem Blog-Artikel habe ich den entscheidenden Hinweis gefunden, dass RPM/GPG in älteren Versionen nicht mit OpenPGP V4-Signaturen umgehen kann. Hier muss die ältere Signatur V3 verwendet werden.

Prinzpiell empfiehlt es sich, für EL5-Pakete mit maximal 2048-bit RSA zu verschlüsseln - das muss bei der Erstellung des GPG-Keys entsprechend berücksichtigt werden.

 1$ gpg --gen-key
 2...
 3Please select what kind of key you want:
 4   (1) RSA and RSA (default)
 5   (2) DSA and Elgamal
 6   (3) DSA (sign only)
 7   (4) RSA (sign only)
 8Your selection? 1
 9RSA keys may be between 1024 and 4096 bits long.
10What keysize do you want? (2048) 2048
11Requested keysize is 2048 bits
12PPlease specify how long the key should be valid.
13         0 = key does not expire
14        = key expires in n days
15      w = key expires in n weeks
16      m = key expires in n months
17      y = key expires in n years
18Key is valid for? (0) 0
19Key does not expire at all
20Is this correct (y/n)? y
21
22GnuPG needs to construct a user ID to identify your key.
23
24Real name: Max Mustermann RPM signing key
25Email address: max@mmuster.de
26Comment: RPM signing key
27You selected this USER-ID:
28    "Max Mustermann RPM signing key (RPM signing key) <max@mmuster.de>"
29
30Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
31...
32$ gpg --export -a 'Max Mustermann RPM signing key (RPM signing key) <max@mmuster.de>' > RPM-GPG-KEY-mmuster

Es empfiehlt sich übrigens nicht die Erstellung des Keys in einer su / sudo-Session zu erstellen, denn das schlägt fehl.

Nach Erstellung des GPG-Keys muss die Datei ~/.rpmmacros angepasst werden, sofern die Pakete auf einem EL6-System signiert werden - in meinem Fall ist das so. Auf EL6-Systemen wird standardmäßig versucht, die V4-Signatur zu verwenden, dieses Verhalten muss deaktiviert werden:

1$ vi .rpmmacros
2%_signature gpg
3%_gpg_name Max Mustermann RPM signing key (RPM signing key) <max@mmuster.de>
4%__gpg_sign_cmd %{__gpg}
5    gpg --force-v3-sigs --digest-algo=sha1 --batch --no-verbose --no-armor
6    --passphrase-fd 3 --no-secmem-warning -u "%{_gpg_name}"
7    -sbo %{__signature_filename} %{__plaintext_filename}

Wenn man den GPG Keynamen nicht zur Hand hat, hilft ein Blick auf die Ausgabe des folgenden Kommandos:

1pub   xxxxD/xxxxxxxx 2014-02-06
2uid                  Max Mustermann RPM signing key (RPM signing key) <max@mmuster.de>
3sub   xxxxg/xxxxxxxx 2014-02-06

Nach erfolgter Signierung des RPM-Pakets sollte nun die Signatur auch auf EL5-Systemen reibungslos erkannt werden:

1EL6 $ rpm --resign mypackage.rpm
2EL6 $ scp mypackage.rpm ...
3EL5 $ rpm -v --checksig mypackage.rpm
4    Header V3 DSA signature: OK, key ID xxxxxxxx
5    Header SHA1 digest: OK (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
6    MD5 digest: OK (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
7    V3 DSA signature: OK, key ID xxxxxxxx

🙂

Übersetzungen: