Let’s Encrypt Fedora Linuxban

A Let’s Encrypt egy új CA szolgáltató az amúgy sem túl népes ingyenes CA szolgáltatók listájában.
Ha valakinek HTTPS web kiszolgálót kellett beállítania, akkor magamból kiindulva eddig vagy a StartSSL-t használta, vagy valami olcsóbb SSL tanusítványt vett például a GoGetSSL oldalon. Ha pedig csak teszt célokra kellett, akkor teljesen ingyen lehetett self-signed cert-et generálni. Mindegyik módszernek megvannak a saját előnyei és hátrányai.
A StartSSL-nél nincs megjegyzendő user / password páros, helyette a böngészőbe települ egy certificate, amivel az oldalon regisztrálás után be lehet jelentkezni. Mivel a StartSSL 1 évre adja az ingyenes kulcsot, így simán elképzelhető, hogy ezalatt az idő alatt valamilyen ok miatt az ember újratelepíti a gépét, ami akár azzal is járthat, hogy elveszti ezt a loginhoz használt kulcsot. Most már megoldották, hogy újat lehet igényelni elvesztése esetén, de azért nem egy egyszerű procedúra. Az ingyenes kulcs engedélyezésére is van mikor órákat vagy akár egy napot is várni kell.
A GoGetSSL-nél a számomra még szimpatikusabb user/password párossal lehet belépni. A csr fájl generáláshoz is sok segítséget adnak különböző példákkal. Aki olcsó SSL tanusítványt keres itt könnyen találhat akár 3–7 USD-ért is évente. Ez nagyon kedvezményes árnak mondható olyan tanusítványokért, amit az ismertebb böngészők is különösebb probléma nélkül elfogadnak.
A Self-Signed Cert már veszélyesebb dolog. Ahogy a nevében is szerepel ezt a generáláskor a generáló (önmagunk) írja alá, azaz senki nem hitelesíti. A böngészők is azonnal jeleznek ilyen cert-et használó oldalra tévedéskor. Sok egyéb más ok miatt is csak és kizárólag tesztelésre érdemes használni, főleg webkiszolgálás esetén.

Let’s Encrypt…
Annó nagyon bonyolultnak hatottak a hivatalos oldalán található leírások, így egyelőre jegeltem vele az közelebbi ismerkedést .Most már szerencsére egyszerűbbek és érthetőbbek. Nemrég bukkantam rá a Let’s Encrypt-es Digital Ocean community tutorialra ami megadta a kezdő lökést. :)
Lássuk.

Annó Docker containerbe integrálták, de most már elérhető a Fedora repojában is. :)
Ubuntunál még nincs benne az alap repo-ban, de talán a 16.04-es Xenial már benne lesz. Addig a Github-ról lehet letölteni, ahogy az a fenti Digital Ocean-os leírásban is szerepel.

Fedora-nál egyszerű telepíteni :) :

dnf install letsencrypt

Ubuntu-ra így telepítettem:

# szukseges csomagok letoltese
apt-get install curl unzip
# github-rol ZIP letoltese
curl -L -O https://github.com/letsencrypt/letsencrypt/archive/v0.3.0.zip
# kicsomagolas
unzip v0.3.0.zip
# letsencrypt inditas
letsencrypt-0.3.0/letsencrypt-auto -h

Látható nem Git-et használva töltöm le a kódot, hanem egy release-t ZIP-ként.
A végén megjelenítem a letsencrypt help-jét.
Ekkor önmagától még egy rakás csomagot feltelepít! Nálam például a gcc, cpp, binutils csomagokat is(!). Gcc-t? Minek? Nah ez az ami nekem itt Ubuntu esetén (főleg szerveren) állj(!)t jelent. Tudom, már elavult beidegződés, de akkor sem akarok “csak úgy” egy teljes fordító (build) környezetet telepíteni csak egy “vacak” csomag miatt. Persze ha valakinek ez nem számít akkor Ubuntun is megy a telepítés gond nélkül, ezt leszámítva.

Ubuntu esetén az alábbi leírásban szereplő minden letsencrypt parancsot letsencrypt-auto -val kell használni! Hogy ez miért ilyen a github-ról letölthető változatban, az jó kérdés :)

A letsencrypt használata nem túl bonyolult. Több lehetséges “módja” van.

Manuális mód:
Ez kicsit kényelmetlenebb, amolyan régimódi. Akkor lehet hasznos, ha a letsencrypt egy szeparált szerveren fut, nem fér hozzá a web szerverhez.

Egy példa parancs a cert generáláshoz:

letsencrypt certonly --manual --text --email "sandras@sharkfishweb.com" -d sharkfishweb.com -d www.sharkfishweb.com

A manuális módban kézzel kell biztosítani, hogy az alább szereplő URL-en az adott tartalmú fájlt elérje:

Make sure your web server displays the following content at
http://sharkfishweb.com/.well-known/acme-challenge/Ocvu-UKmGCX7F0PAOlnC_BgelLMUfVQDHwDKk9b_9hg before continuing:
Ocvu-UKmGCX7F0PAOlnC_BgelLMUfVQDHwDKk9b_9hg.2c7h0DlZ9zqpxbLqIFpMnN9HNHK9CV1apxUyRTc6RgQ
...
Press ENTER to continue
Azaz ekkor kézzel kell létrehozni a web szerveren a .well-known/acme-challenge mappában a Ocvu-UKmGCX7F0PAOlnC_BgelLMUfVQDHwDKk9b_9hg fájlt amiben a Ocvu-UKmGCX7F0PAOlnC_BgelLMUfVQDHwDKk9b_9hg.2c7h0DlZ9zqpxbLqIFpMnN9HNHK9CV1apxUyRTc6RgQ szövegnek kell szerepelnie.
Ha megvan, létre lett hozva és az elérhető az URL-en, akkor lehet folytani a folyamatot az ENTER leütésével.
Ennek hatására létre fognak jönni a cert fájlok:
# ls -hal /etc/letsencrypt/live/sharkfishweb.com/
total 0
drwxr-xr-x 2 root root 75 Jan 24 00:47 .
drwx------ 4 root root 68 Jan 24 00:47 ..
lrwxrwxrwx 1 root root 49 Jan 24 00:47 cert.pem -> ../../archive/sharkfishweb.com/cert1.pem
lrwxrwxrwx 1 root root 50 Jan 24 00:47 chain.pem -> ../../archive/sharkfishweb.com/chain1.pem
lrwxrwxrwx 1 root root 54 Jan 24 00:47 fullchain.pem -> ../../archive/sharkfishweb.com/fullchain1.pem
lrwxrwxrwx 1 root root 52 Jan 24 00:47 privkey.pem -> ../../archive/sharkfishweb.com/privkey1.pem
Automata mód:
Az automata mód nagyon kényelmes. Ha a letsencrypt hozzá tud férni a webszerver által kiszolgált mappákhoz, és a generált random URL-t is el tudja érni, akkor könnyen és gyorsan lehet generálni vele a cert fájlokat.
letsencrypt certonly --renew-by-default -t --email "tech@sharkfishweb.com" -d sharkfishweb.com -d www.sharkfishweb.com --webroot -w /var/www/vhosts/sharkfishweb.com/html/
Az önmaga által generált random fájlt a random tartalommal automatikusan létrehozza a fentihez hasonló almappában a megadott webszerver mappában (--webroot -w ....).
A friss cert fájlokat ekkor is a /etc/letsencrypt/live/<domain név> mappában hozza létre a letsencrypt.
Web szerver beállítás:
Mostanság NGINX-et használok webszervernek. Ennél az alábbi módon lehet egy-egy virtual host-hoz beállítani a generált cert-eket.
server {
listen 443;
server_name *.sharkfishweb.com sharkfishweb.com;
ssl     on;
ssl_certificate /etc/letsencrypt/live/sharkfishweb.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sharkfishweb.com/privkey.pem;
...
A configot ellenőrzni így lehet:
nginx -t
Ha minden rendben már csak újra kell indítani a webszervert:
systemctl restart nginx
Renew:
További fontos dolog, hogy a letsencrypt által generált cert-ek kb 3 hónapig érvényesek. Ez után vagy meg kell újítani őket (renew), vagy újat kell generálni.
A fenti automata parancs megújítja a cert-et, ha az már létezik.
Sok helyen találtam olyan leírást ahol crontab-al, havonta futtatták a fentihez hasonló parancsot.
Pl:
00 23 * 25 * letsencrypt certonly --renew-by-default -t --email "tech@sharkfishweb.com" -d sharkfishweb.com -d www.sharkfishweb.com --webroot -w /var/www/vhosts/sharkfishweb.com/html/ > /tmp/letsencrypt.log 2>&1
Így elvileg minden hónap 25-én megújítja a kulcsot.
Szerencsére akkor sem kell aggódni, ha elsőre nem megy a létrehozás. Újra lehet próbálni amíg nem sikerül, hisz nem kerül semmibe :)
A megújítással sincs gond, ekkor naponta 7x (!) lehet megújítani a cert-et büntetlenül. Ennyi bőven elég volt ahhoz, hogy egy kis segítő scriptet össze tudjak dobni magamnak az automatizálásokhoz :)
Így már nem lehet probléma teljesíteni a Google HTTPS-el kapcsolatos követelményeit sem.
Sok sikert a használatához! :)
Show your support

Clapping shows how much you appreciated SAndras’s story.