Žádost o certifikát z Unixu/openssl

Předpokládá se nainstalovaný OpenSSL verze 0.9.4 nebo vyšší.

Před generováním žádosti je třeba upravit konfigurovační soubor openssl.cnf (/etc/ssl/openssl.cnf, či jinde). Najděte v něm sekci začínající [req] a zkontrolujte, zda je v ní tento řádek:

req_extensions = v3_req # The extensions to add to a certificate request
Pokud je zakomentovaný na začátku mřížkou, tak ji zrušte. Dále obvykle následuje sekce s implicitními parametry požadavku. Není sice nutné ji nastavovat, ale pokud budete generovat požadavky opakovaně, je lepší mít připravené správné implicitní hodnoty:

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            = Brno

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Brno University of Technology

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  =  vaše organizační jednotka anglicky
Pak najděte sekci [v3_req] (stejnou jako na řádku req_extensions), pokud tam není, můžete přidat následující přímo do sekce [req]:

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=DNS:dns_jméno_web_serveru
Uvedení atributu DNS do SubjectAltName je pro Web servery povinné od roku 2017. Pokud chcete vygenerovat certifikát pro více serverů, pak vložte do této sekce:

subjectAltName=DNS:www.server.tld,DNS:www.server2.tld,DNS:www.server3.tld
Použití hvězdičky místo jmen je zakázáno, taková žádost nebude akceptována.

Po vygenerování požadavku nezapomeňte tento řádek opět zrušit (nebo zakomentovat). Jiný způsob, jak dosánout téhož bez modifikace openssl.cnf, je uložit tento jeden řádek do samostatného souboru (např. san.ext) a přidat při generování žádosti parametr -extfile san.ext.

Vygenerování žádosti o certifikát


umask 077
openssl req -new -out server.csr -newkey rsa:2048 -nodes -keyout server_key.pem
Parametr rsa:2048 definuje typ privátního klíče a jeho délku. Od 1.1.2014 je doporučeno používat klíče délky 2048 bitů. Parametr -nodes říká, že privátní klíč nebude uložen do souboru zadaného parametrem -keyout zašifrovaný, ale v otevřené podobě. Toto je obvykle nutné pro serverové aplikace, ale je třeba pamatovat na to, že privátní klíč je pak nechráněný a jeho jedinou ochranou je omezení přístupových práv k souboru klíče!

Pokud není zadán parametr -nodes, požádá openssl po spuštění o zadání hesla pro zašifrování privátního klíče. Toto heslo je ochranou proti zneužití privátního klíče a mělo by být dostatečně kvalitní. Poté následují dotazy na atributy certifikátu. Pokud budou některé dotazy scházet, je třeba upravit konfigurační soubor instalace openssl (/etc/ssl/openssl.conf nebo /usr/local/ssl/openssl.conf, obvykle stačí jen odkomentovat patřičné řádky).

Country Name (2 letter code) : CZ
State or Province Name (full name) : Czech Republic
Locality Name (eg, city) : Brno
Organization Name (eg, company) : Brno University of Technology
Organizační jednotka (Organization Unit, OU) je oficiální anglický název fakulty nebo celoškolské složky VUT dle statutu VUT:

Organizational Unit Name (eg, section) : Faculty of Information Technology
Jméno (Common Name, CN) je oficiální jméno serveru, tedy jméno zaregistrované v DNS (může to být CNAME) a mělo by odpovídat jménu uvedenému v atributu subjectAltName (viz výše). Email je email správce tohoto serveru:

Common Name (eg, YOUR name) []:www.stud.fit.vutbr.cz
Email Address []:www-adm@stud.fit.vutbr.cz

Poté vzniknou dva soubory: server_key.pem (nebo implicitně privkey.pem) a server.csr. První obsahuje (případně zašifrovaný) privátní klíč a druhý žádost o certifikát. Žádost o certifikát obsahuje veřejný klíč odpovídající privátnímu klíči a zadané atributy certifikátu:

-----BEGIN CERTIFICATE REQUEST-----
MIICUzCCAbwCAQAwgegxCzAJBgNVBAYTAkNaMRcwFQYDVQQIEw5DemVjaCBSZXB1
YmxpYzENMAsGA1UEBxMEQnJubzEmMCQGA1UEChMdQnJubyBVbml2ZXJzaXR5IG9m
IFRlY2hub2xvZ3kxPzA9BgNVBAsTNkZhY3VsdHkgb2YgRWxlY3RyaWNhbCBFbmdp
bmVlcmluZyBhbmQgQ29tcHV0ZXIgU2NpZW5jZTEeMBwGA1UEAxMVd3d3LnN0dWQu
ZmVlLnZ1dGJyLmN6MSgwJgYJKoZIhvcNAQkBFhl3d3ctYWRtQHN0dWQuZmVlLnZ1
dGJyLmN6MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf2ADt8yahdNVzhBEm
GOSU4KkgBXX/Tm5H9BpXEjdLsPf1pr4GJdgKKIA2YwZ3oIsuKj9weCaRpSSfLD1R
OYgwjSA4jVSJ19goeymYeZfH+zGxveyWGei70FJNM2iYDebOF6fvnykRWSlW7nm8
P+t1qygOlk6GjHzQNsMZYpIQkQIDAQABoCowEwYJKoZIhvcNAQkCMQYTBGRkZGQw
EwYJKoZIhvcNAQkHMQYTBGRkZGQwDQYJKoZIhvcNAQEEBQADgYEAtPz80aoRDqQ3
C/P+n/nEIMDIBodnWOdtZ6+Qe5ZrMtMMiV/mJm4quOIp6qQ7emwbcb7RAq4cbG7s
AR/5wOvqeP5nt4BwT8EdoDpqxJI0JuNF5iIMl0Lg0bL1omwU0ueTWIloF/wwz6wR
cZiUuFLtq5SgvbuvQFFSHSjSrXbGSgA=
-----END CERTIFICATE REQUEST-----

Žádost lze zobrazit a ověřit správnost zadání v textové podobě příkazem:

openssl req -in server.csr -text

Žádost vložte přes formulář CA VUT pro serverové certikáty ve formátu PKCS#10 a vyčkejte na odpověď. V obdržené odpovědi přijde buď zpráva o chybě nebo podepsaný certifikát, který si uložte do souboru server.pem. Certifikát si také můžete stáhnout v různých formátech ze záložky CA VUT "Valid Certificates-Platné certifikáty". Další postup při instalaci certifikátu už závisí na typu aplikace. Nezapomeňte, že je třeba také nainstalovat do patřičného místa certifikát CA VUT.

Pokud jste při generování žádosti nepoužili parametr -nodes a vygenerovaný privátní klíč máte zašifrovaný, lze jej jednoduše rozšifrovat příkazem:

openssl rsa -in server_key.pem -out server_key_txt.pem
Pokud aplikace vyžaduje privátní klíč a certifikát v jednom souboru ve formátu PEM, pak je obvykle v souboru nejprve privátní klíč, poté certifikát serveru a nakonec certifikát certifikační autority.

Pokud se vám podaří pomíchat privátní klíče a odpovídající certifikáty a nejste si jisti, které si navzájem odpovídají, lze si vypsat privátní klíč i certifikát v textové podobě:

openssl x509 -noout -text -in server.pem
openssl rsa -noout -text -in server_key.pem
Navzájem odpovídající si certifikát a privátní klíč musí mít shodný modulus a exponent (v případě RSA klíče).

Zpět na CA VUT


Poslední změna: 4.5.2017
Připomínky k této stránce zasílejte na adresu lampa@fit.vutbr.cz