Generovanie SSL certifikátov

Vygenerovať správny SSL certifikát je úloha, s ktorou sa stretne každý, kto sa stará o bezpečnost svojich stránok. Vygenerovanie certifikátu a jeho obnova sa však deje tak jeden až dva krát do roka a človek má tendenciu postup zabudnúť. A preto som si nachystal nasledovný postup, ktorý mi pomáha vygenerovať prípadne obnoviť SSL certifikát bez zbytočného zdržiavania. Verím, že pomôže aj vám.

Vygenerovaný SSL certifikát od CAcert.org

Vygenerovaný SSL certifikát od CAcert.org

Ak generovanie certifikátu robíte prvý krát, nainštalujte si v Debiane balík ssl-cert

apt-get install ssl-cert

Následne ja zvyknem upraviť štandardnú dĺžku kľúča v súbore /usr/share/ssl-cert/ssleay.cnf

	[ req ]
	#default_bits            = 2048
	default_bits            = 4096

Aby som mal príkazy na generovanie SSL certifikátu pekne uložené v histórii môjho shellu a boli príkazy univerzálne, zvyknem si nastaviť premennú. Potom stačí zmeniť hodnotu premennej a uložené univerzálne príkazy vyvolať cez Ctrl+r z histórie.

NIECO=uptime.sk

Teraz konečne vygenerujeme certifikát, ktorý zatiaľ nebude podpísaný certifikačnou autoritou

make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/nginx/ssl/$NIECO.crt

Potom nasleduje manuálne rozdelenie CRT súboru na privátnu a verejnú časť. Toto oskriptované zatiaľ nemám.
Do súboru $NIECO.key patrí časť označená ako —BEGIN PRIVATE KEY— a do súboru $NIECO.pem patrí časť označená ako —BEGIN CERTIFICATE—. Kontrola:

vim $NIECO.crt $NIECO.key $NIECO.pem.selfsigned
head -n1 $NIECO.key $NIECO.pem.selfsigned
==> uptime.sk.key <==
-----BEGIN PRIVATE KEY-----

==> uptime.sk.pem <==
-----BEGIN CERTIFICATE-----

Po tomto rozdelení môžete súbor $NIECO.crt odstrániť

rm -f $NIECO.crt

Ja osobne zvyknem používať jeden SSL certitikát pre viac subdomén, preto generujem SSL certifikát aj s alternatívnymi menami, ktoré mi toto umožnia.
Zatial som neprišiel na to, ako tieto parametre zadať na príkazovom riadku, preto to robím tak, že upravím v aktuálnom adresári konfiguračný súbor ./openssl.cnf a na chvíľu tam pridám hodnoty natvrdo:

	[ req ]
	req_extensions = v3_req
	[ v3_req ]
	subjectAltName          = @alt_names
	[alt_names]
	DNS.1   = *.uptime.sk
	DNS.2   = uptime.sk

Teraz už konečne vygenerujeme CSR – Certificate Signing Request

openssl req -config ./openssl.cnf -new -key $NIECO.key -out $NIECO.csr

Tento $NIECO.csr teraz musíte nechať podpísať svojej certifikačnej autorite. Ja s obľubou využívam služby certifikačnej autority CAcert.org, pretože podpísanie SSL certifikátu robia zadarmo. Jediná nevýhoda je tá, že platnosť certifikátu je na začiatku pol roka, takže častejšie musíte obnoviť svoje certifikáty. Ale to až tak veľa úsilia nestojí a podarilo sa mi to aktualizáciu SSL certifikátov automatizovať.

Podpísanie nášho CSR spravíme tak, že po zaregistrovaní a prihlásení request odošleme na adrese CAcert.org. Výstup, ktorý nám vygenerujú si uložíme do súboru $NIECO.pem.

cat > $NIECO.pem

V prípade potreby si parametre môžete skontrolovať takto:

openssl req -in $NIECO.csr -text | grep -A 1 -e '\(CN\|Alter\)'
openssl x509 -in $NIECO.pem -text | less -S
echo '' | openssl s_client -connect mail.uptime.sk:443 |& less -S