Lépésről lépésre útmutató az SSL beállításához Apache szerveren

SSL 9 perc olvasás

Ez az útmutató azt mutatja be, hogyan telepíthet egy már meglévő SSL tanúsítványt kézzel az Apache webszerverre, vezérlőpult nélküli Linux szerveren, például a KVM VPS szervereinken. A lépések Debianon és Ubuntun, valamint AlmaLinuxon, Rocky Linuxon és más Red Hat alapú rendszeren is működnek; ahol a kettő eltér, mindkét változatot megadjuk.

Nem minden esetben van szükség a kézi beállításra:

  • A cPanel tárhelyeken és a webtárhelyeken a tanúsítványt a vezérlőpult telepíti (Let’s Encrypt esetén automatikusan), a webszerver beállításaihoz nem kell hozzányúlnia.
  • Ha ingyenes Let’s Encrypt tanúsítványt szeretne a saját szerverére, a Certbot a tanúsítvány igénylését, az Apache beállítását és a megújítást is elvégzi.

A kézi telepítésre akkor van szükség, ha fizetős tanúsítványt vásárolt, vagy a tanúsítványt máshonnan kapta, és a fájlokat Önnek kell a szerverre tennie. A tanúsítvány típusáról, a CSR elkészítéséről és a cPanel-es telepítésről általánosan az SSL tanúsítvány telepítéséről szóló blogbejegyzésünk szól.

Amire szüksége lesz

  • Root vagy sudo jogosultság a szerveren.
  • Az Apache már működik, és a domain HTTP-n elérhető (a domain A rekordja a szerver IP-címére mutat). Ha még nincs telepítve, lásd: Apache és PHP-FPM telepítése AlmaLinux 9 rendszerre.
  • A 443-as port nyitva van a tűzfalon (lásd: Hogyan állítsak be tűzfalat a VPS-emen?).
  • Három fájl, PEM (szöveges) formátumban:
    • a domain tanúsítványa (például pelda.hu.crt), amelyet a tanúsítványkiadótól kapott;
    • a köztes tanúsítvány vagy CA bundle (például ca-bundle.crt), amely a tanúsítvány mellé jár;
    • a privát kulcs (például pelda.hu.key), amely a CSR-rel együtt készült. Ezt a tanúsítványkiadó nem küldi el, mert sosem kapta meg: ott van, ahol a CSR-t létrehozta (lásd: CSR és privát kulcs létrehozása).

Ha a tanúsítványt PFX vagy P7B formátumban kapta, előbb alakítsa át PEM-re a tanúsítványformátumokról szóló cikk szerint. Egy PEM-fájl szövegszerkesztőben megnyitva -----BEGIN CERTIFICATE----- (a kulcsnál -----BEGIN PRIVATE KEY-----) sorral kezdődik.

A példákban a pelda.hu domain szerepel; a parancsokat és a beállításokat a saját domainjére írja át.

1. Az SSL modul bekapcsolása

Debian, Ubuntu: az SSL modul (mod_ssl) az apache2 csomag része, külön telepíteni nem kell, csak be kell kapcsolni:

sudo a2enmod ssl

AlmaLinux, Rocky Linux, CloudLinux: a modul külön csomagban van:

sudo dnf install -y mod_ssl

A csomag létrehozza az /etc/httpd/conf.d/ssl.conf fájlt, benne egy alapértelmezett HTTPS virtuális hosttal, amely egy önaláírt, a böngészők által nem elfogadott tanúsítványt használ. Ezt a fájlt hagyja meg (a modul általános beállításai is benne vannak), a domainjéhez a 3. lépésben külön fájlt hoz létre.

2. A fájlok elhelyezése

Fűzze a domain tanúsítványát és a köztes tanúsítványt egy fájlba. A sorrend fontos: előbb a domain tanúsítványa, utána a köztes:

cat pelda.hu.crt ca-bundle.crt > pelda.hu-fullchain.crt

Ezután másolja a fájlokat a rendszer szokásos helyére, és állítsa be a jogosultságokat. A privát kulcsot csak a root olvashatja; az Apache a kulcsot még root jogon, az indulásakor olvassa be.

Debian, Ubuntu:

sudo cp pelda.hu-fullchain.crt /etc/ssl/certs/
sudo cp pelda.hu.key /etc/ssl/private/
sudo chown root:root /etc/ssl/private/pelda.hu.key
sudo chmod 600 /etc/ssl/private/pelda.hu.key

AlmaLinux, Rocky Linux, CloudLinux:

sudo cp pelda.hu-fullchain.crt /etc/pki/tls/certs/
sudo cp pelda.hu.key /etc/pki/tls/private/
sudo chown root:root /etc/pki/tls/private/pelda.hu.key
sudo chmod 600 /etc/pki/tls/private/pelda.hu.key
sudo restorecon -Rv /etc/pki/tls

Az utolsó parancs a fájlok SELinux-címkéjét állítja helyre. Ha a fájlokat cp helyett mv paranccsal helyezi át (például a saját könyvtárából), a régi címkéjük megmarad, és az Apache az SELinux miatt nem tudja megnyitni őket, akkor sem, ha a jogosultságok rendben vannak.

A privát kulcsot ne tegye a weboldal könyvtárába (például /var/www alá), és ne küldje el e-mailben. Ha mégis illetéktelen kézbe került, a kiszivárgott privát kulcsról szóló cikk írja le a teendőket.

3. A HTTPS virtuális host beállítása

Hozzon létre egy új konfigurációs fájlt a domain számára.

Debian, Ubuntu: /etc/apache2/sites-available/pelda.hu-ssl.conf

AlmaLinux, Rocky Linux, CloudLinux: /etc/httpd/conf.d/pelda.hu-ssl.conf

A tartalma (a fájlok elérési útját a rendszerének megfelelően adja meg):

<VirtualHost *:443>
    ServerName pelda.hu
    ServerAlias www.pelda.hu
    DocumentRoot /var/www/pelda.hu

    SSLEngine on
    SSLCertificateFile    /etc/ssl/certs/pelda.hu-fullchain.crt
    SSLCertificateKeyFile /etc/ssl/private/pelda.hu.key

    ErrorLog  /var/log/apache2/pelda.hu-ssl-error.log
    CustomLog /var/log/apache2/pelda.hu-ssl-access.log combined
</VirtualHost>

Red Hat alapú rendszeren a tanúsítvány útja /etc/pki/tls/certs/pelda.hu-fullchain.crt, a kulcsé /etc/pki/tls/private/pelda.hu.key, a naplóké pedig /var/log/httpd/....

A DocumentRoot legyen ugyanaz, mint a HTTP-s (80-as porti) virtuális hostban, és ha ott további beállítások is vannak (<Directory> blokk, PHP-FPM kezelő), azokat is másolja át ide, különben a weboldal HTTPS-en máshogy működik.

Régi leírásokban egy harmadik sor is szerepel, SSLCertificateChainFile, amellyel a köztes tanúsítványt külön fájlban lehetett megadni. Az Apache ezt a 2.4.8-as verzió óta elavultnak tekinti; ma minden támogatott Linux-disztribúció ennél újabb Apache-ot ad, ezért elég, ha a köztes tanúsítvány az SSLCertificateFile fájljában, a domain tanúsítványa után szerepel. Hogy miért nem működik az oldal egyes eszközökön, ha a köztes tanúsítvány hiányzik, azt a köztes tanúsítványról szóló cikk magyarázza el.

Debian, Ubuntu: kapcsolja be az új oldalt:

sudo a2ensite pelda.hu-ssl

Red Hat alapú rendszeren a conf.d könyvtárban lévő .conf fájlokat az Apache magától betölti.

Csak biztonságos protokollok

Az SSL 3.0, a TLS 1.0 és a TLS 1.1 elavult és sebezhető (lásd: Mi a különbség a TLS és SSL között?). A mai disztribúciók alapbeállítása ezeket már többnyire nem engedi, de érdemes kifejezetten csak a TLS 1.2-t és a TLS 1.3-at engedélyezni. Debianon és Ubuntun az /etc/apache2/mods-available/ssl.conf, Red Hat alapú rendszeren az /etc/httpd/conf.d/ssl.conf fájlban keresse meg az SSLProtocol sort (ha # jellel ki van kommentezve, törölje a jelet, ha nincs ilyen sor, vegye fel), és írja át így:

SSLProtocol -all +TLSv1.2 +TLSv1.3

AlmaLinuxon és Rocky Linuxon a titkosítási beállításokat a rendszerszintű kriptográfiai házirend (update-crypto-policies) is szabályozza, amelynek DEFAULT szintje már csak a TLS 1.2-t és újabbat engedi. A titkosítási algoritmusok részletes beállításához a Mozilla SSL Configuration Generator eszköze ad a saját Apache- és OpenSSL-verziójához illő, naprakész mintát.

4. Ellenőrzés és újraindítás

Mielőtt az Apache-ot újratöltené, ellenőrizze a beállítások szintaxisát:

sudo apachectl configtest

Ha a válasz Syntax OK, töltse újra a webszervert:

sudo systemctl reload apache2   # Debian, Ubuntu
sudo systemctl reload httpd     # AlmaLinux, Rocky Linux, CloudLinux

A modul első bekapcsolásakor reload helyett restart kell. Ha az Apache nem indul el, a hiba okát a sudo journalctl -u apache2 -n 50 (Red Hat alapú rendszeren -u httpd) parancs, illetve a hibanapló mutatja.

5. HTTP-ről HTTPS-re irányítás

A tanúsítvány telepítése után a weboldal HTTPS-en is elérhető, de a http:// cím is működik tovább. A látogatókat és a keresőket a 80-as porti virtuális hostban egy végleges (301-es) átirányítással terelheti HTTPS-re. Cserélje a HTTP-s virtuális host tartalmát erre:

<VirtualHost *:80>
    ServerName pelda.hu
    ServerAlias www.pelda.hu
    Redirect permanent / https://pelda.hu/
</VirtualHost>

Ha az átirányítást inkább .htaccess fájlban oldaná meg, vagy a teendőkre kíváncsi, amelyek az átállás után következnek (belső linkek, vegyes tartalom, Google Search Console), lásd: Hogyan tudom átirányítani a webhelyemet HTTPS-re?. Ha minden jól működik, a HSTS fejléccel a böngészőket is arra utasíthatja, hogy az oldalt eleve csak HTTPS-en nyissák meg.

6. A telepítés ellenőrzése

Nyissa meg az oldalt a böngészőben https:// címmel, és nézze meg, hogy a címsorban nincs-e figyelmeztetés. Ez azonban önmagában nem elég: a böngészők a hiányzó köztes tanúsítványt sokszor maguktól pótolják, más programok és régebbi telefonok viszont nem.

Megbízhatóbb az ingyenes SSL ellenőrző eszközünk: megmutatja, érvényes-e a tanúsítvány, mely nevekre szól, mikor jár le, és teljes-e a tanúsítványlánc. Adja meg egyszerre a pelda.hu, www.pelda.hu címeket, így mindkét változatot egy lépésben ellenőrizheti.

Parancssorból az OpenSSL-lel nézheti meg, milyen tanúsítványláncot küld a szerver:

openssl s_client -connect pelda.hu:443 -servername pelda.hu -showcerts </dev/null

A kimenet elején a Certificate chain alatt legalább két tanúsítványnak kell szerepelnie (a domainé és a köztes), a végén pedig a Verify return code: 0 (ok) sornak.

Gyakori hibák

Az Apache nem indul el, a naplóban AH02565 vagy „key values mismatch” hiba szerepel. A tanúsítvány és a privát kulcs nem tartozik össze, például mert a tanúsítványt egy másik, később készült CSR-rel igényelték. Hogy összetartoznak-e, a nyilvános kulcsuk összevetésével ellenőrizheti; a két parancsnak ugyanazt az értéket kell kiírnia:

openssl x509 -in pelda.hu-fullchain.crt -noout -pubkey | openssl sha256
openssl pkey -in pelda.hu.key -pubout | openssl sha256

Ha eltérnek, keresse meg a tanúsítványhoz tartozó kulcsot, vagy készítsen új kulcsot és CSR-t, és állíttassa ki újra a tanúsítványt. Az aWh-nál vásárolt tanúsítványnál ezt az Ügyfélportálon teheti meg (lásd: Fizetős SSL tanúsítvány beállítása és újrakiállítása).

Az Apache induláskor jelszót kér, vagy a systemctl parancs nem tudja elindítani. A privát kulcs jelszóval védett. Szerveren a kulcsot jelszó nélkül szokás tárolni (a védelmét a 600-as jogosultság adja), a jelszót így távolíthatja el:

sudo openssl pkey -in pelda.hu.key -out pelda.hu-nopass.key
sudo chmod 600 pelda.hu-nopass.key

A parancs bekéri a kulcs jelszavát, és jelszó nélkül írja ki az új fájlba. Ezután az SSLCertificateKeyFile sorban ezt a fájlt adja meg, a régit pedig törölje.

Az oldal egyes eszközökön, programokban vagy telefonokon tanúsítványhibát ad, a böngészőben viszont jó. Hiányzik a köztes tanúsítvány: ellenőrizze, hogy az SSLCertificateFile által megadott fájlban a domain tanúsítványa után a köztes is benne van.

A böngésző a tanúsítványt nem a domainre kiállítottnak látja, vagy az önaláírt tanúsítványt mutatja. Az Apache egy másik virtuális hostot használ a kéréshez. Ellenőrizze, hogy a ServerName és a ServerAlias pontosan egyezik-e a megnyitott címmel (a www változattal együtt), és a sudo apachectl -S paranccsal nézze meg, melyik fájlban milyen virtuális hostok vannak a 443-as porton. A böngészők hibaüzeneteinek jelentését a „A kapcsolata nem privát” hibáról szóló cikk sorolja fel.

Az apachectl configtest „Invalid command ‘SSLEngine’” hibát ad. Az SSL modul nincs bekapcsolva vagy telepítve: futtassa az 1. lépés parancsát.

HTTPS-en a böngésző nem tud kapcsolódni (időtúllépés vagy „a kapcsolat elutasítva”), HTTP-n viszont működik az oldal. A tűzfal nem engedi a 443-as portot. AlmaLinuxon és Rocky Linuxon a sudo firewall-cmd --list-services kimenetében a https szolgáltatásnak kell szerepelnie, Ubuntun az ufw tűzfal használatakor a sudo ufw status parancs mutatja a nyitott portokat.

A tanúsítvány megújítása

A fizetős tanúsítványok legfeljebb 200 napig érvényesek, ezért egy éves előfizetés alatt legalább egyszer újra ki kell állíttatni a tanúsítványt (lásd: Miért nem érvényesek már egy évig az SSL tanúsítványok?). Ilyenkor a 2. lépés szerint cserélje le a tanúsítványfájlt, és töltse újra az Apache-ot; a virtuális host beállításain nem kell változtatnia, ha a fájlnevet megtartja. Ha új privát kulcsot is készített, azt is cserélje le.

A kézi cserét kiválthatja, ha ACME-előfizetésű fizetős tanúsítványt használ: ezt a Certbot ugyanúgy automatikusan megújítja, mint a Let’s Encrypt tanúsítványokat (lásd a Certbotról szóló cikk végét). A lejárat dátumát a tanúsítvány lejáratának ellenőrzéséről szóló cikk szerint követheti.

Ha a beállítás közben elakad, írjon nekünk a domain nevével és a hibaüzenettel.

Vissza: SSL leírások (35)