Některé z příkazů využívají přepínač -config, za kterým následuje cesta ke konfiguračnímu souboru. Z tohoto souboru jsou načítány některé informace potřebné pro generování certifikátů. Obsah soubor je umístěn na konci textu.
Vytvoříme self-signed certifikát CA s klíčem
openssl req -config ./openssl.cnf -newkey rsa:2048 -nodes -keyform PEM -keyout firma.CA.key -x509 -days 3650 -extensions certauth -outform PEM -out firmaCA.cer
Vygenerujeme žádost o serverový certifikát pro CA společně s klíčem
openssl req -new -newkey rsa:2048 -nodes -keyout server.firma.cz.key -out server.firma.cz.req
Podobně vygenerujeme žádost o klientský certifikát pro CA společně s klíčem
openssl req -config ./openssl.cnf -new -newkey rsa:2048 -nodes -keyout client.firma.key -out client.firma.req
Naší CA vydáme z žádostí serverový i klientský certifikát
openssl x509 -req -in server.firma.cz.req -CA firmaCA.cer -CAkey firmaCA.key -set_serial 100 -extfile openssl.cnf -extensions server -days 730 -outform PEM -out server.firma.cz.cer
openssl x509 -req -in client.firma.cz.req -CA firmaCA.cer -CAkey firmaCA.key -set_serial 101 -extfile openssl.cnf -extensions client -days 730 -outform PEM -out client.firma.cz.cer
Klientský certifikát a klíč uložíme ve formátu PKCS#12
openssl pkcs12 -export -inkey client.firma.cz.key -in client.firma.cz.cer -out client.firma.cz.p12
Pro vynucení autentizace pomocí klientského certifikátu vložíme do virtualhostu apache následující konfiguraci.
SSLVerifyClient require
SSLVerifyDepth 10
SSLCACertificateFile /cesta/k/certifikatu/CA.cer
Ukázka vygeneruje dva soubory server.firma.cz.key
a server.firma.cz.req
, kde se na rsa 2Kbit privátní klíč nepoužije passphrase.
openssl req -new -newkey rsa:2048 -nodes -keyout server.firma.cz.key -out server.firma.cz.req
Soubor server.firma.cz.req
zašleme jako žádost o certifikát certifikační autoritě a získáme certifikát server.firma.cz.cer
. V případě, že již máme privátní klíč, tak k němu můžeme vygenerovat žádost příkazem
openssl req -new -key server.firma.cz.pem -out server.firma.cz.pem
openssl req -x509 -newkey rsa:2048 -nodes -keyform PEM -keyout firma.key -days 3650 -outform PEM -out firma.cer
openssl x509 -req -days 365 -in server.firma.cz.req -signkey server.firma.cz.key -out server.firma.cz.cer
openssl req -in server.firma.cz.req -noout -text
openssl req -in server.firma.cz.req -noout -verify -key server.firma.cz.key
openssl rsa -noout -text -in server.firma.cz.key
openssl x509 -text -in ./server.firma.cz.cer
openssl verify server.firma.cz.cer
openssl pkcs12 -info -in ./server.firma.cz.p12
Pokud potřebujeme změnit formát lze vhodně zkombinovat direktivy -inform
a -outform
.
openssl x509 -outform der -in server.firma.cz.req -out server.firma.cz.req.der
openssl pkcs12 -in ./file.oksystem.cz.2.p12 -clcerts -nokeys -out ./file.oksystem.cz.2.cer
openssl pkcs12 -in ./file.oksystem.cz.2.p12 -nocerts -nodes -out file.oksystem.cz.2.key
openssl pkcs12 -export -inkey client.firma.cz.key -in client.firma.cz.cer -out client.firma.cz.p12
openssl rsa -in server.firma.cz.key -out server.firma.cz-bezpassphrase.key
openssl s_client -connect remote.host:25 -starttls smtp
[ req ]
default_md = sha2
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
countryName = Country
countryName_default = CZ
countryName_min = 2
countryName_max = 2
localityName = Locality
localityName_default = Prague
organizationName = Organization
organizationName_default = OKsystem a.s.
commonName = Common Name
commonName_max = 64
[ certauth ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints = CA:true
crlDistributionPoints = @crl
[ server ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
nsCertType = server
crlDistributionPoints = @crl
[ client ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = clientAuth
nsCertType = client
crlDistributionPoints = @crl
[ crl ]
URI=http://testca.local/ca.crl