1. Изготвяне
на OpenPGP
DSA базиран ключ и сертификат за подписване на RPM
пакети.
Притежаващите такъв сертификат могат да пропуснат
тази стъпка.
Сертификатът се генерира чрез GNUPG. Проверете дали
имате този пакет наличен в системата и се уверете, че е в
последна
версия за дадената дистрибуция:
# rpm
-q gnupg
gnupg-1.2.4-2.1
#
yum
check-update gnupg
#
След като бъде установено, че пакета gnupg е наличен в
системата, се
стартира проверка за да се установи дали пакета gnupg е цял
и
работоспособен (проверка на целостта):
# rpm
--verify
gnupg
#
Сега вече може да се пристъпи към генериране на DSA
сертификата:
#
gpg --gen-key
gpg (GnuPG) 1.2.4; Copyright (C) 2003 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)
(4) RSA (sign only)
Your selection?
Изберете (2) и натиснете 'Enter' за да влезете в менюто за
избор на
дължина на ключа. За сега максималната и препоръчителна
дължина за DSA
ключ е 1024:
What
keysize do
you want? (1024)
Следва указване на срок
на валидност
на сертификата. Препоръчително е той да има 1 година време
за живот (но
не и повече):
Requested keysize
is 1024 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) 1y
Key expires
at Tue 21 Jun 2005 05:25:19 PM EEST
Is this
correct (y/n)?y
Следва обявяване на информационните полета за сертификата.
Примерно те
може да бъдат зададени така:
You
need a User-ID
to identify your key; the software constructs the user
id
from Real
Name, Comment and Email Address in this form:
"Heinrich Heine
(Der Dichter) "
Real name:
Vesselin Kolev
Email
address: vesso@openintegra.com
Comment: for
RPM signing
You selected
this USER-ID:
"Vesselin Kolev
(for RPM signing) "
Change
(N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
След като те бъдат попълнени трябва да бъде въведена парола
за защита
на частния ключ (изберете си сигурна парола, която няма да
забравите,
но и няма да може да бъде лесно разкрита):
You
need a Passphrase to protect your secret key.
Enter Passphrase:
След като паролата бъде въведена два пъти, следва изписване
на
информация подобна на следната:
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.
++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++...
++++++++++++++++
+++++++++.+++++.++++++++++++++++++++++++++++++++++++++++.........+++++
public and secret key created and signed.
key marked as ultimately trusted.
pub 1024D/9A49A2B8 2004-06-21 Vesselin Kolev (for RPM
signing)
Key fingerprint = 2E6F DF70 CED0 6385
1EAA 9045 813D 6054 9A49 A2B8
Note that this key cannot be used for encryption. You may
want to
use
the command "--edit-key" to generate a secondary key for
this purpose.
С това процедурата по генериране на ключа и прилежащия му
сертификат
приключва и той може да се предостави за подписване от
страна на
различни удостоверители в рамките на схемата "Web Of
Trust".
2.
Импортиране на сертификата в базата със сертификати на
RPM
За да може един сертификат да бъде импортиран в
базата със сертификати на RPM е нужно той да бъде във ASCII
форматен
файл. Това може да бъде направено съвсем лесно с gnupg (за
примера ще
бъде използван идентификатора на сертификата даден за
пример в точка 1):
# gpg
-a --export
9A49A2B8 > dsa-cert.asc
Следва стъпката по импортиране на сертификата в базара на
RPM:
# rpm
--import
dsa-cert.asc
и с това процедурата приключва.
3. Указване на сертификат за подписване на RPM
пакетите
Това указване се прави във файла .rpmmacros, който
се намира в домашната директория на потребителя който ще
компилира RPM
файла (за примера тук това е root):
%_signature
gpg
%_gpg_name
vesso@openintegra.com
%_gpg_path
~/.gnupg
Първият и третия ред са дадени за пълнота. Указването на
сертификат
(всъщно се укзва частния ключ към сертификата) е извършено
на втория
ред и може да стане и по шестнадесетичен идентификатор, а
не само по
име (както е в примера).
4. Изтегляне на изходния код
Изходния код на OCSP демона може да бъде изтеглен от
следния адрес:
За примера, текущата версия е 0.5.1 и файла с изходния код
е
OpenCA-OCSPD-0.5.1.tar.gz. Той се поставя в
/usr/src/redhat/SOURCES.
По-напредналите могат да направят специален запис в
SPEC файла, който да позволи архива да бъде изтеглен
автоматично.
5. Разпакетиране и изваждане на SPEC файла
По принцип, след като файлът
OpenCA-OCSPD-0.5.1.tar.gz
се постави в
/usr/src/redhat/SOURCES
не е нужно да се разпакетира ръчно (rpmbuild е невероятно
мощен
инструмент и освен да гледа бебета и да глади завеси :)
може да
разпакетира архиви). В случая разпакетирането ще бъде
направено с цел
да бъде извлечен SPEC файла, чрез който може да бъде
изграден RPM
пакета. Добре е да се работи с опции "zxvf" на TAR, за да
може да има
копие от архивния файл в
/usr/src/redhat/SOURCES
(rpmbuild ще използва именно архивния файл и няма да се
интересува от
наличието на директорията с изходния код). Следва извличане
на SPEC
файла:
#
cd /usr/src/redhat/SOURCES
# tar zxvf OpenCA-OCSPD-0.5.1.tar.gz
# cp
/usr/src/redhat/SOURCES/OpenCA-OCSPD-0.5.1/contrib/OpenCA-OCSPD.spec.in
/usr/src/redhat/SPEC
може да се започне с изграждането на RPM пакета. Преди това
обаче
трябва да се зададе версията. Това може да стане така. С
произволен
текстов редактор се отваря файла
OpenCA-OCSPD.spec.in
и в него се намира реда:
%define
ver
@VERSION@
който може да се преобразува до:
%define
ver
0.5.1
Можете и да дефинирате подверсия (тя е характерна само за
RPM пакета)
на следващия го ред:
%define
RELEASE 2
Много хора незапознати с RPM пакетната система може да се
запитат защо
пък е тази допълнителна подверсия. Ето един случай, когато
тя би била
от критично значение. Ако вече е била инсталирана версия 2
на пакета,
но междувременно се е рапортувал проблем с пакета (като
цяло или с RPM
изградения такъв), то коригираната версия (чрез пач
например) може да
се именова като подверсия 3 на пакета и да се направи
обновяване на
пакета на машините, на които той е бил инсталиран като
по-ниска версия.
Така версията на OCSPD се запазва същата, но се обновява
версията на
RPM изградения пакет.
6. Изграждане и подписване на RPM пакета
Влиза се в
/usr/src/redhat/SPEC
и се стартира процеса на изгрждане и подписване на RPM
пакета:
#
rpmbuild -ba
--sign OpenCA-OCSPD.spec.in
След натискането на 'Enter' ще се появи меню за въвеждане
на паролата
за отключване на частния ключ към сертификата, с който ще
бъде
извършено подписването на пакета:
Enter
pass phrase:
След правилното й въвеждане ще се изпише съобщението:
Pass
phrase is
good.
и ще бъде стартиран процеса по изграждане на RPM
пакета.
Ако процеса на изграждане е протекъл до край, след
приключването му в
/usr/src/redhat/RPMS/i386
ще се намират два RPM файла:
OpenCA-OCSPD-0.5.1-2.i386.rpm
OpenCA-OCSPD-debuginfo-0.5.1-2.i386.rpm
Първият е пакетът, който е нужен за инсталирането на
демона, а вторият
е debuginfo пакета (в общия случай няма да ви се налага да
го
инсталирате).
7. Проверка на електронния подпис и целостта и
инсталиране
Проверката на електронния подпис, който е извършен
върху пакета може да стане след като сертификат е вече
наличен в RPM
базата на всички машини, на които ще бъде извършена
инсталация или
обновяване. Как се прибавя сертификат в RPM базата е
описано в точка 2.
Самата проверка се извършва в команден ред така:
#
rpm --checksig -vv
/usr/src/redhat/RPMS/i386/OpenCA-OCSPD-0.5.1-2.i386.rpm
D: Expected size: 29952 =
lead(96)+sigs(344)+pad(0)+data(29512)
D: Actual size:
29952
D: opening db environment /var/lib/rpm/Packages
joinenv
D: opening db index
/var/lib/rpm/Packages rdonly mode=0x0
D: locked db index
/var/lib/rpm/Packages
D: opening db index
/var/lib/rpm/Pubkeys rdonly mode=0x0
D: read h# 800 Header sanity check: OK
D: ========== DSA pubkey id 813d60549a49a2b8
/usr/src/redhat/RPMS/i386/OpenCA-OCSPD-0.5.1-2.i386.rpm:
Header V3 DSA signature: OK, key ID 9a49a2b8
Header SHA1 digest: OK
(021b00e8bbc474901cbb74bf1823be999814eb2c)
MD5 digest: OK (9934ddc34f1ab2c246813a47e8fc6c15)
V3 DSA signature: OK, key ID 9a49a2b8
D: closed db index
/var/lib/rpm/Pubkeys
D: closed db index
/var/lib/rpm/Packages
D: closed db environment /var/lib/rpm/Packages
Както се вижда, всичко с пакета е наред (т.е. проверката на
целостта и
идентификацията е протекла до край и е дала положителни
резултати).
Инсталацията на пакета може да бъде извършена в
команден ред така:
# rpm
-Uhv
OpenCA-OCSPD-0.5.1-2.i386.rpm