Let's Encrypt ingyenes SSL telepítése ISPConfig3-as szerverkörnyezetre

botond küldte be 2018. 12. 04., k - 01:27 időpontban

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.

 

Alapfeltétel:
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

A csomagkezelővel a backports csomagtárolóból telepíthető a Certbot Debian 8 (Jessie)-re és Debian 9 (Stretch)-re is. Azonban a Certbot programba fontos frissítések kerültek, amik még nem kerültek át a Debian 8 disztribúció csomagtárába, ezért újabban a Debian 8-ra történő telepítésnél a lenti Certbot-auto módszert javasolják, ami tartalmazza a Debian 8 számára is a legújabb frissítéseket.
(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)

Azoknak a Debian 8-as Certbot felhasználóknak, akik már korábban a csomagkezelővel telepítették fel a Certbot-ot a fenti módon, javasolják, hogy most szedjék le, és helyette használják a certbot-auto programot, hogy a 8-as Debian felhasználóihoz is eljuthasson a program legfrissebb változata. A régi csomagot pedig azért kell leszedni, hogy ne akadhasson össze a két verzió.

 

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.

 

Fontos!
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.

 

Amennyiben a HTTPS-re átállított weboldalhoz használjuk a Google Search Console-t (korábbi nevén: Google Webmester eszközök), abban az esetben a weboldalt újra fel kell vinni HTTPS:// címmel is, mert az külön tulajdonnak számít a rendszerben és az új, HTTPS oldalak újraindexeléséből származó statisztikai adatok is már erre fognak érkezni.

 

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.