от Beco(22-06-2004)

рейтинг (17)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Fedora Core 2: Компилиране на RPM дистрибутив на демон за OCSP

Copyright © 2004 Веселин Колев, OpenIntegra

Описание: Тази статия има за цел да помогне на системните администратори на сървъри, обслужващи удостоверителни услуги, при изграждането на OCSP улугата. В статията е описано накратко изграждането на RPM дистрибутив за демона OCSPD. Така чрез една компилация и създаването на съответен пакет, може да се извърши бърза, сигурна и безпроблемна инсталация на демона върху множество машини.

В статията е описано и електронното подписване на пакета с DSA, както и импортирането на сертификата в RPM базата с OpenPGP сертификати. Настройките, конфигурациите и издаването на сертификат за OCSPD не са обект на тази статия. Протокола OCSP е описан в RFC2560.

Процедурата по изграждане на RPM дистрибутив за други RPM базирани дистрибуции е почти една и съща, но описаните тук действия са извършени и проверени върху Fedora Core 2.


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



<< Пример за употреба на Access Control Lists с Линукс | Slackware ядро + ALSA >>