Linux - Certifikační autorita

Občas potřebujeme k provozu nějaké služby certifikát. Certifikační autoritu si na Linuxu uděláme snadno. Tady bude pár poznámek jak na to.

Nejdříve si nainstaluji openssl.
apt-get install openssl

Potom si vytvořím adresář kde budu mít CA uloženou.
mkdir /mnt/data/ca/domena.cz

Do adresáře autority nakopíruji default konfigurační soubor.
cp /etc/ssl/openssl.cnf /mnt/data/ca/domena.cz

Upravíme konfigurační soubor /mnt/data/ca/domena.cz/openssl.cnf podle svých potřeb. Pojedeme od začátku dolu.
Upravil jsem:
[CA_default]
dir=. # Toto je root certifikační autority, pro funkčnost stačí upravit jen toto
database = $dir/ca/index.txt # Přesunul jsem index do adresáře autority
certificate = $dir/ca/cacert.pem # Přesunul jsem certifikát autority
serial = $dir/ca/serial # Přesunul jsem čítač sériových čísel
crlnumber = $dir/ca/crlnumber # Přesunul jsem číslování certifikátů
default_days = 1825 # Defaultní délka platnosti certifikátu (3 roky)
default_md = 256
policy = policy_anything # Aby nemuselo být v žádostech vše stejné jako u CA
[req]
default_bits = 2048 #Defaultní délka klíče
[req_distinguished_name]
countryName_default = CZ # Předvyplním zkratku státu, nemusí se pak zadávat při žádosti
stateOrProvinceName_default = # Zrušil jsem defaultní nastavení pro stát/provincii
localityName = Praha # Přidal jsem defaultní město, abych nemusel pořád vyplňovat
0.organizationName_default = Firma # Přednastavil jsem jméno firmy

Vytvořil jsem potřebné adresáře a soubory
mkdir /mnt/data/ca/domena.cz/ca
chmod 700 /mnt/data/ca/domena.cz/ca
mkdir /mnt/data/ca/domena.cz/newcerts
mkdir /mnt/data/ca/domena.cz/private
chmod 700 /mnt/data/ca/domena.cz/private
mkdir /mnt/data/ca/domena.cz/crl
touch /mnt/data/ca/domena.cz/ca/index.txt
echo 01 > /mnt/data/ca/domena.cz/ca/serial

Teď si vygeneruji certifikační autoritu
openssl req -config openssl.cnf -new -x509 -out cacert.pem -keyuot cakey.pem -days 10950 -newkey rsa:4096 -nodes

Přesunul jsem cakey.pem do /mnt/data/ca/domena.cz/private/ a nastavil opravneni
Přesunul jsem cacert.pem do /mnt/data/ca/domena.cz/ca/
mv cakey.pem /mnt/data/ca/domena.cz/private/
chmod 400 /mnt/data/ca/domena.cz/private/cakey.pem
mv cacert.pem /mnt/data/ca/domena.cz/ca/

Vytvoření žádosti o certifikát
openssl req -config openssl.cnf -new -out request.pem -keyout key.pem -days 1098 -newkey rsa:4094 -nodes

Vytvoření certifikátu ze žádosti
openssl ca -config openssl.cnf -in request.pem -out cert.pem -days 365
Export podepsane zadosti pro import do Windows
openssl x509 -inform PEM -outform DER -in cert.pem -out cert.der

Export do pkcs12, použitelné pro Windows/IE
bez klíče
openssl pkcs12 -export -in cert.pem -out cert.p12 -nokey
s klíčem
openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12