Domů > Linuxové zápisky pro správce > OpenSSL: podepisování a klíče

OpenSSL: podepisování a klíče

Všechny úkony s certifikáty se řídí nastavením v  /etc/ssl/openssl.cnf

Ukázkový příklad nastavení pro server example.net. Jsou zde jen relevantní části, které je potřeba editovat.

[ ca ]
default_ca      = CA_default             # The default ca section
...
[ CA_default ]

dir             = /etc/ssl               # Where everything is kept
certs           = $dir/certs             # Where the issued certs are kept
crl_dir         = $dir                   # Where the issued crl are kept
database        = $dir/data/index.txt    # database index file.
#unique_subject = no                     # Set to 'no' to allow creation of
                                         # several ctificates with same subject.
new_certs_dir   = $dir/newcerts          # default place for new certs.

certificate     = $dir/certs/ca_fp.crt   # The CA certificate
serial          = $dir/data/serial       # The current serial number
crlnumber       = $dir/crlnumber         # the current crl number
                                         # must be commented out to leave a V1 CRL
crl             = $crl_dir/crl.pem       # The current CRL
private_key     = $dir/private/ca_fp.key # The private CA key
RANDFILE        = $dir/.rand             # private random number file

x509_extensions = usr_cert               # The extentions to add to the cert
...
default_days    = 1825                   # how long to certify for
default_crl_days= 30                     # how long before next CRL
default_md      = sha1                   # which md to use.
preserve        = no                     # keep passed DN ordering
...
policy                                   = policy_match
...
[ req ]
default_bits                             = 2048
default_keyfile                          = key.req
distinguished_name                       = req_distinguished_name
attributes                               = req_attributes
...
[ req_distinguished_name ]
countryName                              = Country Name (2 letter code)
countryName_default                      = CZ
countryName_min                          = 2
countryName_max                          = 2

stateOrProvinceName                      = State or Province Name (full name)
stateOrProvinceName_default              = Czech Republic

localityName                             = Locality Name (eg, city)
localityName_default                     = Praha

0.organizationName                       = Organization Name (eg, company)
0.organizationName_default               = Firma s.r.o.
...
organizationalUnitName                   = Organizational Unit Name (eg, section)

Chceme-li vytvořit certifikát pro server, odkomentujeme následující

nsCertType = server

Pokud budete chtít uplatnit certifikát i na jiné domény, jako například na doménu loc, přidejte následující direktivy. Můžete tak předejít chybovým hlášením, že nesouhlasí jméno certifikátu se jménem  serveru.

[ v3_req ]
subjectAltName = DNS:example.loc, DNS:*.example.loc

Máme nastaveny cesty k certifikátům, a to v /etc/ssl. Vytvoříme si tedy i podadresáře pro typy certifikátů. Pouze ty, které v systému ještě nemáme.

mkdir /etc/ssl/data
mkdir /etc/ssl/certs
mkdir /etc/ssl/newcerts
mkdir /etc/ssl/private
mkdir /etc/ssl/requests

Vytvoření souborů, nutných pro správne generování (a přehled vydaných) certifikátů

echo 01 > /etc/ssl/data/serial    # začínáme od čísla 1
touch /etc/ssl/data/index.txt

Generování certifikátů

Generování vlastní CA

openssl req -new -x509 -nodes -out certs/ca.crt -keyout private/ca.key -days 3650

Generování DH

openssl dhparam -out private/dh2048.pem 2048

Generování žádosti o certifikát

openssl req -new -nodes -out requests/prijmeni_jmeno.req -keyout private/prijmeni_jmeno.key -days 3650

Vytvoření a podepsání klíče

openssl ca -in requests/prijmeni_jmeno.req -out certs/prijmeni_jmeno.crt -days 3650

Vytvoření .p12 klíče

Pro podepisování e-mailů např. v poštovním klientovi Mozilla Thunderbird

openssl pkcs12 -inkey private/prijmeni_jmeno.key -chain -in certs/prijmeni_jmeno.crt -CAfile certs/ca_fp.crt -out p12/prijmeni_jmeno_FPCA.p12 -name "Jmeno Prijmeni" -export

Revokace certifikátu

openssl ca -revoke newcerts/01.pem
openssl ca -gencrl -out crl.pem

Kopírování klíčů

Překopírování souboru (klíče) pomocí ssh ze serveru

sudo scp -i /cesta/ke/klici/klic.key IP_serveru:/co/kopirovat/soubor /kam/kopirovat

Překopírování souboru (klíče) pomocí ssh na server

sudo scp -i /cesta/ke/klici/klic.key /co/kopirovat/soubor IP_serveru:/kam/kopirovat