Tartalom
Bevezető
A Let's Encrypt segítségével ingyenesen juthatunk SSL tanúsítványhoz, hogy az általunk üzemeltetett weboldalakat a biztonságos HTTPS protokollon keresztül működtethessük.
Ebben a leírásban feltelepítjük a Let's Encrypt Certbot rendszerét egy ISPConfig3-as szerverkörnyezetre. A telepítés végeztével rendszerünk készen áll a szerveren menedzselt domain nevek ingyenes SSL tanúsítványainak beszerzésére és automatikus bekonfigurálására, megújítására, hogy bármelyik általunk kezelt weboldalt néhány kattintással átállíthassuk HTTPS-re.
Ez a telepítési útmutató egy korábban elkészült Tökéletes szerver (vagy hasonló ISPConfig3-as) konfigurációra épül – amin még nincs telepítve a Let's Encrypt – ezért ennek a leírásnak a végrehajtásához elengedhetetlenül szükséges.
Certbot beszerzése
A kezdéshez szükségünk lesz a Certbot ACME (Automated Certificate Management Environment) kliensre, ami automatikusan fogja nekünk lekérni a Let's Encrypt tanúsítványkibocsátó hatóságtól a friss SSL tanúsítványunkat, vagy megújítani azt, amikor szükséges.
Ebben a leírásban kétféle módszert is leírok a Certbot beszerzéséhez: Csomagkezelő használatával és a certbot-auto script letöltésével és futtatásával. Mindkettőnek megvan a maga szerepe, menet közben részletezem a logikáját.
Certbot beszerzése a csomagkezelő használatával
(Persze ez még változhat, ha a Debian 8 csomagtárába még bekerülnek ezek a frissítések, akkor újra ez lehet a preferált telepítési módszer Debian 8-hoz is.)
Én nemrég még így telepítettem fel a Debian 8-as szerveremre és működik szépen az oldalon néhány napja bekapcsolt SSL.
Először engedélyeznünk kell a Debian csomag tároló listájában a Debian Backports tárolót is, ahova hamarabb kerülnek fel a csomagok, mint a stabilba.
Nyissuk meg rootként az APT csomagkezelő forráslistáját:
nano /etc/apt/sources.list
És adjuk a fájlhoz a Debian verziónknak megfelelő sort:
Debian 9 (Stretch) rendszerben:
deb http://ftp.debian.org/debian stretch-backports main
Debian 8 (Jessie) esetén, ha mégis ezzel szeretnénk telepíteni, akkor:
deb http://ftp.debian.org/debian jessie-backports main
Mentsük le, majd frissítsük a tárolót az apt-get paranccsal:
apt-get update
Ezután telepítsük a certbot csomagját (Apache-hoz):
Debian 9 (Stretch)-en:
apt-get install python-certbot-apache -t stretch-backports
Itt a csomag hivatalos verziója a 0.28.0-1~bpo9+1
Debian 8 (Jessie) esetén pedig:
apt-get install python-certbot-apache -t jessie-backports
Itt pedig a csomag verziója: 0.10.2-1~bpo8+1
Tehát itt valóban jóval régebbi a csomag, így érthető, hogy Debian 8-ra a lenti Certbot-auto módszert javasolják. Talán valamikor még bekerül a Debian 8 backportjába is a frissebb csomag és akkor újra ezt fogják ajánlani.
(Nginx esetén a python-certbot-apache helyett a python-certbot-nginx csomagot telepítsük.)
Itt egyéb teendőnk nincs, a továbbiakat már az ISPConfig végzi. Így tehát kézzel ne futtassunk Certbot parancsokat.
A Certbot csomag feltelepítése után létrehoz egy cron fájlt: /etc/cron.d/certbot, ebbe a következőt rakja:
[...] 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
Ez a cron bejegyzés futtatja le 12 óránként a Certbot ellenőrző részét, ami naponta kétszer figyeli a domainekhez tartozó tanúsítványok érvényességi idejét, és ha valamelyik weboldalnál ez kevesebb, mint 30 nap, akkor új SSL tanúsítványt kér le.
Elavult csomagok eltávolítása (opcionális)
Mivel én is ebbe a csoportba tartozom, így most én is elvégzem a régi certbot csomag törlését, és feltelepítem helyette a certbot-auto scriptet, ami biztosítja a legfrissebb programváltozatot.
Bár gond nélkül működött eddig a régi certbot is, de már csak azért is lecserélem, hogy utólag hitelesen tudjak a működésével kapcsolatban nyilatkozni.
apt-get remove certbot
Ezt nem írja a hivatalos leírás, de én még törlöm a bent maradt függőségi csomagokat is (ahogy az iménti APT parancs kimenete is javasolja), aztán ami kell ezek közül, azt a certbot-auto script ismét feltelepíti magának:
apt-get autoremove
Ezzel leszedett sok python-os csomagot.
Ezt szintén nem írják a hivatalos leírásban, hogy a csomagok törlése után a régi cron bejegyzés még megmarad, ami ugyanúgy lefut 12 óránként. Ezt is töröljük, vagy kommentezzük ki, különben a cron rendszer hibát fog jelezni, mivel a régi certbot indítófájl törlésre került, ezért már nem létezik a /usr/bin/certbot elérési útvonalon.
rm /etc/cron.d/certbot
Így már mindent leszedtünk a régi certbotból, készen állunk az új certbot-auto script akadálymentes használatához.
Certbot beszerzése a certbot-auto script letöltésével
Ezt a módszert csak a Debian 8-ra történő telepítésnél javasolják, mivel, ahogy fentebb is láthattuk, a 9-es Debianban már elég frissek a csomagok, hogy a csomagkezelőből telepíthessük.
A certbot-auto script letöltése és futtathatóvá tétele a chmod paranccsal:
mkdir /opt/certbot
cd /opt/certbot
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
A certbot-auto script ugyanazokkal a kapcsolókkal működik, mint a korábbi változat valamint önmagát frissíti futtatáskor. Így minden egyes ellenőrzéskor a legfrissebb verzió kerül lefuttatásra.
Indítsuk el a programot Apache módban (vagy a --apache kapcsoló nélkül Nginx módban), hogy inicializálja magát a rendszer:
./certbot-auto --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: linuxportal.info 2: www.linuxportal.info [...] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
Itt felsorolja a domain neveket, amiket talál a szerveren, és megkérdezi, hogy melyikhez szeretnénk HTTPS kapcsolatot.
Itt ne válasszunk ki semmit, mert ilyenkor belenyúlna a virtualhost fájlokba, ami az ISPConfigos szerverkörnyezetben nem ajánlott. Ezért itt nyomjuk meg a c-t, majd enter.
A log fájlban (/var/log/letsencrypt/letsencrypt.log) megjelenik pár hiba, hogy nem szabályosan fejeződött be a script futása (mivel kiléptünk), de ezzel nem kell foglalkoznunk.
Let's Encrypt SSL engedélyezése az ISPConfig3-ban
Ha idáig eljutottunk a fenti módszerek valamelyikével, akkor itt jön a dolog kényelmesebb része: Aktiváljuk a Let's Encrypt SSL-t valamelyik weboldalon.
A Let's Encrypt csak működő, az internetről elérhető weboldalak esetén fogja kiadni a tanúsítványt. Tehát ráirányított domain névvel és megfelelően beállított DNS zónával kell rendelkeznie.
Lépjünk be adminként az ISPConfig rendszerbe, majd a Webhelyek főmenüben válasszuk ki a kívánt weboldalt, kattintsunk rá és az űrlapján (az alapértelmezett Domain fülön) jelöljük be az SSL és az alatta lévő Let's Encrypt jelölőnégyzeteket.
Szerencsére épp van kéznél egy weboldalam, aminek nem is árt, ha kap egy SSL-t. Így most élőben izgulhatok én is, hogy minden jól menjen. :)
Az űrlap lementésekor megjelenik fent a szokásos piros kör, ami jelzi, hogy az ISPConfig cron-ja 1 percen belül aktualizálja a módosításokat. Ezalatt terminálban benézhetünk a log fájlba, hogy mi történik:
cat /var/log/letsencrypt/letsencrypt.log
Párszor újra futtatva, egyszer csak elindul a folyamat, és érkeznek az első napló bejegyzések, amiben rengeteg információ, köztük maguk a key, pem fájlok, JSON tömbökben a paraméterek, és hogy mit hova mentett. A végén pedig a lényeg:
2018-12-03 21:08:17,160:DEBUG:certbot.reporter:Reporting to user: Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/xxxx.hu/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/xxxx.hu/privkey.pem Your cert will expire on 2019-03-03. To obtain a new or tweaked version of this certificate in the future, simply run letsencrypt-auto again. To non-interactively renew *all* of your certificates, run "letsencrypt-auto renew" 2018-12-03 21:08:17,161:DEBUG:certbot.reporter:Reporting to user: If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Tehát végül sikeresen lekérte a certbot-auto script az SSL tanúsítványokat és tájékoztat minket a megújításkori teendőkről, amivel természetesen nem foglalkozunk, mert az ISPConfig fogja ezt elvégezni helyettünk.
Ja, és volt egy alias domainem is ráirányítva az oldalra, természetesen ahhoz is kikérte a tanúsítványokat www-vel és anélkül is.
Legvégül ha minden jól működik, és a weboldalt is felkészítettük a HTTPS használatára, akkor az ISPConfigban bekapcsolhatjuk ugyanitt a weboldal beállításainak Átirányítás fülére lépve a "Rewrite HTTP to HTTPS" opciót. Ezzel átirányítunk minden HTTP-re érkező kérést egy 301-es fejléc átirányítással a megfelelő HTTPS címre, ami ráadásul teljesen SEO-barát megoldás.
Hibaelhárító
Mivel nekem szerencsére még nem volt semmi problémám a Let's Encrypt debian csomagjaival sem, és a mostani certbot-auto scriptre történő átállás is zökkenőmentes volt, így itt inkább csak támpontokkal tudok szolgálni, hogy hiba esetén hol érdemes körülnézni. Általánosságban, a fellépő hibákat legkönnyebben a naplófájlok bogarászásával azonosíthatjuk be, és háríthatjuk el. Ezért most összeszedtem pár hasznos tippet az esetlegesen felmerülő hibák könnyebb felderítésére és megoldására.
Let's Encrypt naplófájl
Let's Encrypt naplófájl megtekintése:
cat /var/log/letsencrypt/letsencrypt.log
ISPConfig cron naplófájl
A megújításokkal kapcsolatban pedig az ISPConfg cron naplófájljában tájékozódhatunk:
cat /var/log/ispconfig/cron.log | grep certbot -C 20
Itt rákeresünk a certbot szóra, valamint megjelenítjük a talált sor előtti és utáni 20-20 sort is, hogy egyben lássuk a certbot-al kapcsolatos történéseket.
ISPConfig Let's Encrypt cronjob debugolása
Rootként futtassuk a következőt a terminálban, hogy láthassuk az ISPConfig által futtatott Let's Encrypt cron feladatának kimenetét:
php -q /usr/local/ispconfig/server/cron_debug.php --cronjob=900-letsencrypt.inc.php
Ez a tanúsítványok megújítási hibáihoz jön jól.
ISPConfig Let's Encrypt cronjob fájl áttekintése
Az alábbi php fájlt Futtatja le az ISPConfig a fentebbi cron job végrehajtásakor. Így ha valami gubanc van, érdemes belenézni, hogy pl a különböző elérési útvonalaknál nincs-e valami rendellenesség, stb:
nano /usr/local/ispconfig/server/lib/classes/cron.d/900-letsencrypt.inc.php
Persze semmiképp ne módosítsuk a fájlt, csak kiindulásnak jó lehet az esetleges hibák felderítéséhez.
Let's Encrypt megújítási konfigurációs fájlok megtekintése
Lépjünk be az alábbi könyvtárba:
cd /etc/letsencrypt/renewal
És itt domain-enként vannak a .conf fájlok. Így a kérdéses weboldal konfig fájljában is találhatunk hasznos adatokat, például hogy az acme alkönyvtárak jó helyre mutatnak-e, stb.
Konklúzió
Így most már működnek az SSL-ek a weboldalakon az ISPConfig rendszerében.
Ez a leírást leginkább azoknak szántam, akik hasonló cipőben járnak, mint ahogyan én is: A korábban feltelepített tökéletes szerver konfigurációba a kezdetekkor még nem került bele a Let's Encrypt SSL szolgáltatása, ezért menet közben kellett feltelepíteni, vagy a régi verziót lecserélni az újra. De remélem mások is találnak benne hasznos információkat.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 1279 megtekintés