# SSL Labs SSL Server Test: HTTPS-beállítások ellenőrzése

> Az SSL Labs ingyenes tesztje megmutatja, jól van-e beállítva egy oldal tanúsítványa, protokolljai és HSTS-e, a WordPress-specifikus vegyes tartalmat viszont külön kell keresni.

Az **SSL Labs SSL Server Test** egy nyilvános szerver HTTPS-beállítását vizsgálja: a tanúsítványt, a tanúsítványláncot, a támogatott protokollokat és titkosításokat. Az eredmény egy osztályzat (A+ és F között) és részletes jelentés. WordPress-oldalnál új tárhely, új tanúsítvány vagy átállás HTTPS-re után érdemes lefuttatni.

A teszt a szervert méri, nem a WordPress-tartalmat. Hogy az oldal elemei is biztonságosan töltődnek-e be, azt külön kell ellenőrizni (lásd lent).

## Teszt indítása

1. Nyisd meg: [ssllabs.com/ssltest](https://www.ssllabs.com/ssltest/).
2. A **Hostname** mezőbe írd be az oldal gépnevét, például `example.com` (protokoll nélkül).
3. A **Do not show the results on the boards** jelölőnégyzetet pipáld be, ha nem akarod, hogy az eredmény megjelenjen a nyilvános listán. Éles ügyfél-oldalnál ezt érdemes bejelölni.
4. Indítsd el a tesztet, és várd meg a jelentést.

## Az osztályzat jelentése

Az SSL Labs [Server Rating Guide](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide) szerint a pontszám három részből áll: protokoll 30%, kulcscsere 30%, titkosítás erőssége 40%. A betűjegy ebből jön: A 80 ponttól, B 65-től, C 50-től, D 35-től, E 20-tól, F 20 alatt.

| Jegy | Jelentése |
|---|---|
| **A+** | Jó beállítás, nincs figyelmeztetés, és a HSTS (legalább 6 hónapos `max-age`) be van kapcsolva. |
| **A** | Jó beállítás. |
| **A-** | Alapvetően jó, de van figyelmeztetés, például hiányzó TLS 1.3 vagy érvénytelen HSTS. |
| **B, C** | Gyengeség miatt levont jegy. |
| **D, E, F** | Súlyos hiba. Az F jelent például SSL 2.0-t, Heartbleedet vagy 1024 bitnél rövidebb kulcsot. |
| **T** | A tanúsítvány nem megbízható (például önaláírt, vagy nem megbízható hitelesítésszolgáltatótól). |
| **M** | A tanúsítványban lévő név nem egyezik a teszteltel. |

Néhány gyakori levonás az útmutatóból:

- B-re korlátozza: TLS 1.0 vagy 1.1 támogatása, SSL 3, RC4, hiányos tanúsítványlánc, 2048 bitnél rövidebb DH-paraméter.
- C-re korlátozza: TLS 1.2 hiánya, POODLE.
- F: SSL 2.0, nem biztonságos újratárgyalás, Heartbleed.
- Lejárt, visszavont vagy önaláírt tanúsítványnál a tanúsítvány pontszáma nulla.

A jelentés az egyes hibákhoz kiírja az okot is, ezért az útmutatóban nem kell keresned.

## Tanúsítványlánc hibái

A jelentés a tanúsítványláncot is megmutatja. A hiányos lánc a rating guide szerint B-re korlátoz. Ilyenkor a böngészők egy része működik (képes pótolni a hiányzó tagot), mások és az API-kliensek hibát adnak.

Teendő: a szerveren a tanúsítványfájl mellé a hitelesítésszolgáltató köztes (intermediate) tanúsítványát is be kell állítani. A pontos lépés a webszerver és a tárhely típusától függ, ezt kérdezd a tárhelyszolgáltatótól.

Az **M** jegy általában azt jelenti, hogy a tanúsítvány másik gépnévre szól (például `www` nélküli névre, de a `www`-t teszteled). A **T** lejárt, önaláírt vagy nem megbízható kibocsátó esetén jön.

## Protokollok

Az útmutató szerint a régi protokollok pontszáma alacsonyabb: SSL 2.0 0%, SSL 3.0 80%, TLS 1.0 90%, TLS 1.1 95%, TLS 1.2 és 1.3 100%. A cél: csak TLS 1.2 és 1.3 legyen bekapcsolva. A TLS 1.0 és 1.1 támogatása B-re korlátoz, a TLS 1.3 hiánya A- jegyet ad.

A protokollokat a webszerver vagy a tárhely konfigurálja, WordPressből nem állítható.

## HSTS

A **HSTS** (`Strict-Transport-Security` fejléc) azt mondja a böngészőnek, hogy az oldalt csak HTTPS-en keresse. Az A+ jegyhez legalább 6 hónapos `max-age` kell. Példa az MDN dokumentációjából:

```http
Strict-Transport-Security: max-age=31536000; includeSubDomains
```

Óvatosan kapcsold be:

- Ha a tanúsítvány hibás, a böngésző nem engedi továbblépni a felhasználót.
- Az `includeSubDomains` minden aldomaint érint: ha valamelyik csak HTTP-n megy, elérhetetlen lesz.
- Amíg a `max-age` le nem jár, a böngésző emlékszik rá. A `preload` beállítása hosszú távú vállalás, a listáról való kikerülés nem csak rajtad múlik.

Előbb teszteld rövid `max-age`-dzsel, és csak akkor növeld, ha minden aldomain HTTPS-en működik.

## WordPress: vegyes tartalom

Az SSL Labs nem látja a WordPress-oldal tartalmát, ezért a **vegyes tartalmat** (mixed content) nem jelzi. Ez az, amikor HTTPS-en betöltött oldal HTTP-n kér le képet, scriptet vagy stílust. Az MDN szerint a böngészők a szkriptet, stíluslapot, iframe-et és `fetch()` hívást blokkolják, a képet, hangot, videót HTTPS-re írják át, ha lehet.

Keresés:

1. Nyisd meg az oldalt a böngészőben HTTPS-en.
2. Nyisd meg a fejlesztői eszközöket, és nézd a **Console** fület. Az MDN szerint a konzol figyelmeztet, ha vegyes tartalmat blokkolt vagy átírt.
3. Menj végig a fő oldaltípusokon (főoldal, bejegyzés, termékoldal), mert a hibás hivatkozás sokszor egy konkrét tartalomban van.

Javítás:

1. A **Beállítások > Általános** (Settings > General) oldalon a **WordPress cím (URL)** és a **Webhely címe (URL)** (angolul WordPress Address (URL), Site Address (URL)) mindkettő `https://`-sel kezdődjön, per jel nélkül a végén.
2. Ha a `wp-config.php`-ban `WP_HOME` és `WP_SITEURL` konstans van, ott javítsd (ilyenkor a konstans felülírja az adatbázisbeli értéket):

```php title="wp-config.php"
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );
```

3. WP-CLI-vel is átállíthatod:

```bash title="Terminál"
wp option update home 'https://example.com'
wp option update siteurl 'https://example.com'
```

4. A tartalomban maradt `http://` hivatkozásokat cseréld le. A WordPress dokumentációja szerint sima adatbázis-csere megsértheti a szerializált adatot, ezért WP-CLI-t vagy Better Search Replace bővítményt használj, és a `guid` oszlopot soha ne módosítsd:

```bash title="Terminál"
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
```

Először mindig `--dry-run`-nal nézd meg, mit cserélne, és előtte készíts mentést. A harmadik féltől származó hivatkozásokat (külső kép, script) írd át a szolgáltató HTTPS-címére.

Tartalék: a `Content-Security-Policy: upgrade-insecure-requests` fejléc minden kérést HTTPS-re emel. Az MDN szerint ez védőháló, a hibás hivatkozások javítását nem váltja ki.

Ha reverse proxy mögött fut a WordPress, és a HTTPS-t a proxy végzi, a hibás beállítás átirányítási hurkot okozhat. A WordPress dokumentációja szerint ilyenkor az `X-Forwarded-Proto` fejlécet kell figyelembe venni, ha a proxy beállítja.

## Ha a Cloudflare proxy előtted áll

A Cloudflare dokumentációja szerint két kapcsolat van: a látogató és a Cloudflare között, valamint a Cloudflare és a szervered között. A teszt a nyilvános gépnévre csatlakozik, ahogy egy látogató, vagyis az első kapcsolatot méri. A szervered saját beállítását és tanúsítványát ez a teszt így nem mutatja. A Cloudflare **SSL/TLS** módjai (Off, Flexible, Full, Full (strict)) a szervered felé menő kapcsolatot szabályozzák, a Full (strict) a szerver tanúsítványát is ellenőrzi.

## Mire figyelj

- A teszt a nyilvános gépnevet vizsgálja, és a jelentés a szerver nyilvános adatait tartalmazza. A **Do not show the results on the boards** bejelölése nélkül az eredmény látszhat a nyilvános listán.
- Beállítás módosítása után futtasd újra a tesztet, és nézd meg a böngésző konzolját is.
- Az A+ nem cél önmagában: a HSTS hibás bekapcsolása többet árt, mint az A jegy.

## Hasznos linkek

- [SSL Labs SSL Server Test](https://www.ssllabs.com/ssltest/)
- [SSL Server Rating Guide](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide)
- [Strict-Transport-Security (MDN)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security)
- [Mixed content (MDN)](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content)
- [Changing the site URL (WordPress)](https://developer.wordpress.org/advanced-administration/upgrade/migrating/)
- [wp-config.php (WordPress)](https://developer.wordpress.org/advanced-administration/wordpress/wp-config/)
- [HTTPS a WordPressben](https://developer.wordpress.org/advanced-administration/security/https/)
- [Cloudflare SSL/TLS módok](https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/)
