certification authority

Marcin Król krol w wsb-nlu.edu.pl
Wto, 4 Maj 2004, 11:23:31 CEST


> Witajcie.
> Próbował ktoś na PLD uruchomić jakieś oprogramowanie o funkcjonalności CA? (np www.openca.org).
> Osobiście próbowałem uruchomić OpenCA z miernymi skutkami (problemy z formularzami w mozilli, a i IE sobie nie radzi). 
> Chętnie wymienie z kimś doświadczenia związane z tego typu oprogramoawniem.
> Pozdrawiam.

Mi w zupelnosci do generowania certyfikatow wystarcza openssl. Mozna na 
nim zrobic proste CA w nastepujacy sposob:

1. W /var/lib/openssl zakldamy nastepujace katalogi: certs, crl, 
newcerts, private oraz pusty plik index.txt, a takze pliczek serial 
poprzez echo 01 > serial

2. Jezeli nie mamy w /var/lib/openssl symlinku do 
/etc/openssl/openssl.cnf - tworzymy go (ln -s /etc/openssl/openssl.cnf 
/var/lib/openssl/openssl.cnf

3. Edytujemy pliczek openssl.cnf zmieniajac nastepujace sciezki:
dir = /var/lib/opensll
certs = $dir/certs
crl_dir = $dir/crl
database = $dir/index.txt
certificate = $dir/private/cacert.pem
serial = $dir/serial
private_key = $dir/private/cakey.pem

4. Generujemy kluczy prywatny naszego CA:

openssl genrsa -des3 -out /var/lib/openssl/private/cakey.pem 1024

Zaleca sie zachowanie wielkosci klucza 1024. Wieksze klucze moga 
powodowac problemy z niektorymi przegladarkami WWW i aplikacjami 
korzystajacymi z certyfikatow. Lepiej tez ten plik zbackupowac i zadbac 
aby nikt nie mial do niego dostepu. Jest to klucz prywatny naszego CA 
ktory bedzie uzywany do podpisywania certyfikatow... A chyba nie chcemy 
aby ktos za nas podpisywal certyfikaty? ;)

5. Tworzymy CSR (Certificate Signing Request) dla naszego CA:

openssl req -new -key /var/lib/openssl/private/cakey.pem -out 
/var/lib/private/cacsr.pem

6. Generujemy certyfikat dla klucza publicznego naszego CA wazny na 10 lat:

openssl req -in /var/lib/openssl/private/cacsr.pem -out 
/var/lib/openssl/private/cacert.pem -key 
/var/lib/openssl/private/cakey.pem -x509 -days 3652

7. Wykonujemy:
chown -R root:root /var/lib/openssl/private
chmod 700 /var/lib/openssl/private
i chmod 600 wszystkich plikow w /var/lib/openssl/private

I mamy juz nasze CA... Teraz mozemy np. wygenerowac certyfikat dla 
apache'a wazny przez dwa lata:

openssl genrsa -des3 -out jakis_vhost-key.pem 1024

openssl req -new -key jakis_vhost-key.pem -out jakis_vhost-csr.pem

openssl ca -in jakis_vhost-csr.pem -out jakis_vhost-crt.pem -days 730 
-policy policy_anything

I gotowe. Wystarczy pliczki jakis_vhost-key.pem i jakis_vhost-crt.pem 
podpiac w odpowiednim miejscu w konfiguracji apache'a.

Jezeli apache przy starcie zada od nas hasla do certfikatu, mozemy je 
usunac:

openssl rsa -in jakis_vhost-key.pem -out jakis_vhost-bez-hasla-key.pem

Jezeli potrzebujemy naszego certyfikatu w formacie .pem (tak, wiem, 
pliki w powyzszych przykladach maja mylne rozszerzenia, ale tak sie juz 
przyzwyczailem, ze nie chcialo mi sie modyfikowac), np dla imaps czy 
pop3s to wystarczy:
cat jakis_vhost-key.pem > nasz_certyfikat.pem
cat jakis_vhost-crt.pem >> nasz_certyfikat.pem

Oczywiscie haslo z pliku *-key.pem lepiej usunac, albo bedziemy o nie 
pytani przy starcie uslugi.

Jezeli potrzebujemy, mozemy tez odwolac waznosc certyfikatu poprzez:

openssl ca -revoke jakis_vhost-crt.pem -keyfile 
/var/lib/openssl/private/cakey.pem -cert /var/lib/openssl/cacert.pem

Nadmienic jeszcze trzeba, ze korzystanie z polecenia openssl za kazdym 
razem gdy chcemy wygenerowac certyfikat moze byc dosc uciazliwe, chocby 
ze wzgledu na potrzebe podawania kilka razy hasla naszego CA. Dlatego 
tez warto sobie powyzsze czynnosci obskryptowac. Haslo mozemy przekazac 
do polecenia np przy generowaniu certyfikatu w taki sposob:

openssl genrsa -des3 -out $1-key.pem -passout 
file:/var/lib/openssl/private/nasze_super_tajne_haslo 1024

gdzie plik /var/lib/openssl/private/nasze_super_tajne_haslo zawiera 
haslo, bez znaku konca linii.

Podobnie mozna przekazac haslo w kazdym z uzywanych powyzej polecen, 
wystarczy zerknac w skladnie polecenia openssl.

Mam nadzieje, ze choc troche pomoglem, i ze niczego nie pokrecilem :-)

Pozdrawiam.
M.



Więcej informacji o liście dyskusyjnej pld-users-pl