# TLS-tanúsítvány

> A teszt a 443-as porton ellenőrzi a tanúsítványt: érvényes, megbízható és legalább 14 napig él-e, és hogy a szerver nem fogad-e el TLS 1.0 vagy 1.1 kapcsolatot.

A TLS-tanúsítvány bizonyítja a böngészőnek, hogy valóban a te oldaladhoz kapcsolódik, és ez teszi lehetővé a titkosított (`https://`) kapcsolatot. Ha lejár, nem megbízható, vagy nem erre a névre szól, a böngészők teljes oldalas figyelmeztetést mutatnak az oldalad helyett, a látogatók többsége pedig itt elfordul. A keresők és a megosztó szolgáltatások is bizalmatlanok az ilyen oldallal szemben. A riportban a teszt súlyossága magas.

A teszt ugyanezen a kapcsolaton azt is nézi, hogy a szerver nem fogad-e el még TLS 1.0 vagy 1.1 kapcsolatot: ezeket az IETF már tiltja (RFC 8996), és a böngészők sem támogatják.

## Hogyan mérjük

A riport TLS-kézfogást indít a vizsgált host 443-as portjára az oldal nevével (SNI), és kiolvassa a szerver tanúsítványát. A `<host>` a vizsgált domain, vagy `www.` előtaggal a domain, ha a csupasz domain nem válaszol. A kézfogás időkorlátja 8 másodperc. A mérés nem szakad meg hibás tanúsítványnál sem: a lejárt vagy nem megbízható tanúsítványt is beolvassa, és külön megnézi, elfogadható-e.

A teszt kétállapotú: megfelelő vagy hiba, külön figyelmeztetés nincs. A hibák okát a riport ebben a sorrendben vizsgálja, és az első találat számít:

1. **A kézfogás nem sikerül, vagy nincs tanúsítvány** (nem válaszol a 443-as port, időtúllépés, protokollhiba): hiba, ok: nem megbízható.
2. **Lejárt**: a tanúsítvány lejárati ideje már elmúlt (a hátralévő napok száma negatív; a nap egész napra lefelé kerekítve).
3. **Hamarosan lejár**: a lejáratig kevesebb mint 14 nap van hátra. A „0 nap” azt jelenti, hogy ma lejár.
4. **Nem megbízható**: a tanúsítvány ellenőrzése nem sikerül (például önaláírt, hiányos a lánc, vagy nem erre a domainre szól).
5. **Régi protokoll**: a szerver egy második, csak TLS 1.0 és 1.1 verziót felkínáló kézfogást is elfogad.

Ha egyik sem igaz, a teszt megfelel, és kiírja a lejáratig hátralévő napok számát.

Mivel az elsőként talált ok számít, egy lejáró és egyben nem megbízható tanúsítvány „hamarosan lejár”-ként jelenik meg; a másik problémát a javítás után mutatja a következő mérés.

Amit a teszt **nem** néz: a visszavonást (OCSP, CRL), a kulcs méretét és a titkosítók (cipher suite) erősségét, a közbenső tanúsítványok lejáratát (csak a szervertanúsítvány lejárati idejét olvassa), valamint a `www.` és a csupasz domain másik nevét, ha a mérés csak az egyikre indul. Ezekhez használd az [SSL Labs tesztjét](https://hub.hellowp.io/hu/knowledge-base/useful-tools/ssl-labs/).

## Hogyan javítsd

A teendő attól függ, melyik ok jelent meg a riportban.

### Lejárt vagy hamarosan lejáró tanúsítvány

A tanúsítványt meg kell újítani, és be kell kapcsolni az automatikus megújítást. A Let’s Encrypt tanúsítványai alapértelmezetten 90 napig érvényesek, és a szolgáltató azt javasolja, hogy 60 naponként újítsd meg őket. Ha tehát egy tanúsítványból 14 napnál kevesebb van hátra, a megújítás szinte biztosan elromlott.

1. Nézd meg, mi újítja meg a tanúsítványt: a tárhelyszolgáltató, a CDN vagy a szerveren futó ACME-kliens (például a Certbot). Tárhelyen vagy CDN-en a megújítást a szolgáltatónál kell kérni, vagy bekapcsolni.
2. Certbot esetén listázd a tanúsítványokat és a lejáratukat:

   ```bash title="Terminál"
   certbot certificates
   ```

3. Próbáld ki a megújítást éles tanúsítvány cseréje nélkül:

   ```bash title="Terminál"
   certbot renew --dry-run
   ```

   A hibaüzenet többnyire megmondja az okot (például nem elérhető a 80-as port, vagy a domain nem a szerverre mutat).
4. Ellenőrizd, hogy van-e időzített feladat, ami a megújítást futtatja. A Certbot dokumentációja szerint a legtöbb telepítés előre beállított időzítővel jön; Linuxon a `systemctl list-timers` listában vagy a rendszer crontabjában kell keresned a `certbot renew` parancsot.
5. Ha a szerver leáll megújításkor, vagy a megújítás után újra kell tölteni a webszervert, használd a `/etc/letsencrypt/renewal-hooks/` mappa horog (hook) szkriptjeit.

### Nem megbízható vagy hibás tanúsítvány

Ennek tipikus okai: önaláírt tanúsítvány, hiányzó közbenső tanúsítvány (hiányos lánc), vagy a tanúsítvány nem tartalmazza az oldal nevét. A teendő: kérj érvényes tanúsítványt a pontos névre (és a `www.` változatra is, ha használod), és a webszerveren a **teljes láncot** tartalmazó fájlt add meg. Az nginx dokumentációja szerint az `ssl_certificate` fájlban a szervertanúsítvány után kell következnie a közbenső tanúsítványoknak:

```nginx title="nginx"
ssl_certificate     /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
```

Az elérési utakat cseréld a sajátjaidra. A Certbot a `fullchain.pem` fájlt adja ehhez. Az ingyenes Let’s Encrypt tanúsítványhoz a [Certbot utasításai](https://certbot.eff.org/instructions) a szoftvered és rendszered kiválasztása után lépésenként végigvezetnek.

Nem kell WordPressben beállítani semmit: a tanúsítvány a webszerveren vagy a CDN-nél van, nem a WordPress részeként.

### Régi TLS-verziók kikapcsolása

Ha a riport „Kapcsold ki a régi TLS-verziókat” javítást ad, a szerver még elfogad TLS 1.0 vagy 1.1 kapcsolatot. Elég a TLS 1.2 és 1.3.

#### nginx

Az `http` blokkba. Az nginx dokumentációja szerint az `ssl_protocols` alapértéke `TLSv1.2 TLSv1.3`, tehát valahol kifejezetten bekapcsolták a régi verziókat:

```nginx title="nginx"
ssl_protocols TLSv1.2 TLSv1.3;
```

Ha egy `server` blokkban vagy egy beemelt fájlban is szerepel `ssl_protocols` sor, ott is írd át, mert a server szintű érték érvényesül.

#### Apache

Az Apache virtual host (vagy fő) konfigurációjába. `.htaccess`-ben nem működik, mert az Apache dokumentációja szerint az `SSLProtocol` csak a szerver- és a virtual host-szinten állítható.

```apache title="Apache virtual host"
SSLProtocol -all +TLSv1.2 +TLSv1.3
```

#### Cloudflare

Ha a Cloudflare mögött vagy, a látogatók a Cloudflare TLS-beállítását látják: **SSL/TLS → Edge Certificates → Minimum TLS Version: TLS 1.2**. A Cloudflare dokumentációja szerint a magasabb minimum kikapcsolja a régebbi verziókat.

```text title="Cloudflare"
Minimum TLS Version: TLS 1.2
```

Az nginx és az Apache beállítását a konfiguráció újratöltése után kezdi használni a szerver; utána ellenőrizd az eredményt.

## Hogyan ellenőrizd

1. Futtasd újra a riportot a domainre. A „TLS-tanúsítvány” sor megfelelő lesz, és kiírja a lejáratig hátralévő napok számát.
2. Parancssorból a lejárati dátumot így nézheted meg:

   ```bash title="Terminál"
   openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates
   ```

   A `notAfter` sor a lejárat időpontja.

3. A `curl` is megmutatja a tanúsítvány adatait és az ellenőrzés eredményét:

   ```bash title="Terminál"
   curl -vI https://example.com/ 2>&1 | grep -iE "expire date|subjectAltName|SSL certificate verify"
   ```

   Érvényes tanúsítványnál a kimenetben ez szerepel: `SSL certificate verify ok.`
4. A teljes TLS-beállítást (lánc, protokollok, titkosítók) az [SSL Labs SSL Server Test](https://hub.hellowp.io/hu/knowledge-base/useful-tools/ssl-labs/) vizsgálja részletesen, ingyen.
