Prejsť na obsah

Nastavenia súborov cookie

Vyberte, aké druhy súborov cookie povolíte. Svoj výber môžete kedykoľvek zmeniť cez Nastavenia súborov cookie v dolnej časti každej stránky. Vyhlásenie o ochrane osobných údajov

Nevyhnutné

Vždy zapnuté

Potrebné na prihlásenie, uchovanie košíka a zapamätanie vašich volieb. Sú vždy zapnuté.

Ktoré súbory cookie?
  • weboke_sessie, weboke_klant, weboke_remember: vaša relácia a trvalé prihlásenie
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazovanie cien s DPH alebo bez DPH
  • wok_cookies: váš výber súborov cookie, 12 mesiacov

Merajú, ktorá reklama vedie k návšteve alebo objednávke, aby sme neplatili za reklamy, ktoré nič neprinášajú.

Ktoré súbory cookie?
  • Google Ads cez Google Tag Manager (_gcl_au, _gcl_aw), najviac 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: ktorý partner vás k nám odporučil (partnerský program), 60 dní

4,6

Krajina a jazyk

Každá krajina má vlastný web s cenami a DPH danej krajiny.

Zobraziť

Caddy, HSTS a security.txt

Modul 7: Doména, webový server a https · Čas čítania: 12 minút

Cieľ lekcie: Po tejto lekcii dokážete používať Caddy ako jednoduchý webový server s automatickým https, nastaviť HSTS a najdôležitejšie bezpečnostné hlavičky (v Caddy aj nginx) tak, aby vaša stránka zostala dostupná, a zverejniť platný súbor security.txt.

Kľúčové pojmy: Caddy, Caddyfile, automatické https, reverse_proxy, file_server, header, HSTS (Strict-Transport-Security), max-age, includeSubDomains, preload, X-Content-Type-Options, frame-ancestors, Referrer-Policy, security.txt, Contact, Expires, /.well-known/

Caddy: https bez starostí

V lekcii 7.2 a 7.3 vznikla pomocou nginx a certbot stránka s https. Sú to dva programy, niekoľko súborov a časovač. Caddy to zvládne v jednom: je to webový server so zabudovaným klientom ACME. Ak je v konfigurácii uvedený názov, ten smeruje na server a porty 80 a 443 sú dostupné, Caddy si sám získa certifikát, včas ho obnoví a presmeruje http na https.

Caddy je v repozitári balíkov Debianu aj Ubuntu (v trochu staršej verzii); jeho autori ponúkajú aj vlastný zdroj apt s najnovšou verziou, s vlastným kľúčom a Signed-By ako v lekcii 4.1. V module 9 beží Caddy ako kontajner pre vaše služby v Dockeri (lekcia 9.4). Tu ho používate ako bežnú službu.

anna@web1:~$ sudo apt install caddy
anna@web1:~$ systemctl status caddy

Na portoch 80 a 443 používajte buď nginx, alebo Caddy, nie oboje: na jednom porte môže počúvať iba jeden program.

Caddyfile

Konfigurácia sa nachádza v /etc/caddy/Caddyfile. Statická stránka a aplikácia za reverznou proxy:

example.com, www.example.com {
	root * /var/www/example.com
	file_server
	encode zstd gzip
}

app.example.com {
	reverse_proxy 127.0.0.1:3000
}

To je všetko. Caddy automaticky počúva na IPv4 aj IPv6, vyžiada certifikáty pre všetky tri názvy, presmeruje http na https a pri reverse_proxy sám odovzdá hlavičky X-Forwarded-For a X-Forwarded-Proto (čo ste v nginx robili ručne, lekcia 7.2).

Testovanie a opätovné načítanie prebieha ako pri nginx:

anna@web1:~$ caddy validate --config /etc/caddy/Caddyfile
Valid configuration
anna@web1:~$ sudo systemctl reload caddy
anna@web1:~$ sudo journalctl -u caddy -f

V journale uvidíte získavanie certifikátov. Ak sa niečo pokazí, nájdete tam dôvod: zvyčajne rovnaký ako pri certbote (port 80 je zatvorený, názov smeruje inam, nefunkčné IPv6; lekcia 7.3).

HSTS: prehliadač si zapamätá, že ide o https

Presmerovanie z http na https má jeden slabý moment: úplne prvá požiadavka cez http ide ešte nešifrovane. Niekto v rovnakej sieti ju môže zachytiť a udržať návštevníka na http. HSTS (HTTP Strict Transport Security, RFC 6797) to rieši. Vaša stránka posiela cez https túto hlavičku:

Strict-Transport-Security: max-age=31536000

Prehliadač si potom na jeden rok (31.536.000 sekúnd) zapamätá, že tento názov sa smie otvárať iba cez https. Ak návštevník neskôr napíše http://, prehliadač z toho sám urobí https ešte predtým, ako niečo odíde do siete. Hlavičku HSTS, ktorá príde cez http, prehliadač ignoruje; platí iba cez https.

Má to aj odvrátenú stranu. Ak si prehliadač HSTS zapamätal a uvidí chybu certifikátu (vypršaný, nesprávny názov), návštevník nedostane tlačidlo, ktorým by mohol aj tak pokračovať. Vaša stránka je potom pre týchto návštevníkov nedostupná, kým nebude certifikát v poriadku. Preto:

  1. HSTS zapnite až vtedy, keď https funguje všade a obnovovanie prebieha automaticky (lekcia 7.3).
  2. Začnite s krátkym max-age, napríklad jeden deň (86400), a postupne ho zvyšujte až na rok.
  3. Buďte opatrní s includeSubDomains: platí pre každú subdoménu, aj pre starú subdoménu so zariadením alebo službou bez platného certifikátu.
  4. preload žiada o zaradenie do zoznamu zabudovaného v prehliadačoch (hstspreload.org). Na to sa okrem iného vyžaduje max-age aspoň jeden rok, includeSubDomains a https na všetkých subdoménach. Vyradenie zo zoznamu trvá mesiace. Urobte to iba vtedy, ak máte istotu, že celá doména bude natrvalo na https.

Ďalšie bezpečnostné hlavičky

Okrem HSTS existuje niekoľko hlavičiek, ktoré s malou námahou veľa pomôžu:

HlavičkaProti čomuHodnota na začiatok
X-Content-Type-Optionsprehliadač háda, o aký súbor ide, takže nahratý "obrázok" sa môže spustiť ako skriptnosniff
Content-Security-Policy: frame-ancestors (alebo staršie X-Frame-Options)clickjacking: iná stránka neviditeľne načíta vašu stránku do rámcaframe-ancestors 'self' (alebo X-Frame-Options: SAMEORIGIN)
Referrer-Policyadresa vašej stránky (s hľadanými výrazmi alebo číslami objednávok) uniká na iné stránkystrict-origin-when-cross-origin

Úplná Content-Security-Policy (ktoré skripty a štýly sa smú načítať) sa robí na mieru pre každú stránku a presahuje rámec tohto kurzu; začnite iba s frame-ancestors.

V Caddy ich nastavíte direktívou header v bloku stránky:

example.com, www.example.com {
	root * /var/www/example.com
	file_server
	header {
		Strict-Transport-Security "max-age=31536000"
		X-Content-Type-Options "nosniff"
		Content-Security-Policy "frame-ancestors 'self'"
		Referrer-Policy "strict-origin-when-cross-origin"
		-Server
	}
}

Caddy HSTS ani tieto hlavičky nenastavuje sám; musíte ich tam teda naozaj pridať. -Server odstráni hlavičku Server. V lekcii 9.4 pridáte do rovnakého typu bloku vlastnú hlavičku X-Weboke-Cursus pre úlohu.

V nginx dáte rovnaké riadky do bloku server pre port 443:

add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

always zabezpečí, že sa pošlú aj pri chybových stránkach. Pozor na známu pascu nginx: ak je v bloku location čo i len jedna vlastná add_header, riadky add_header z bloku server už pre túto location neplatia. Preto vždy skontrolujte výsledok:

anna@laptop:~$ curl -sI https://example.com | grep -iE 'strict|nosniff|frame|referrer'
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
content-security-policy: frame-ancestors 'self'
referrer-policy: strict-origin-when-cross-origin

security.txt: takto vám niekto môže nahlásiť zraniteľnosť

Predstavte si, že niekto nájde na vašom serveri zraniteľnosť, napríklad otvorený priečinok alebo zastaranú službu. Ako sa ten človek dozvie, koho má upozorniť? Na to slúži security.txt (RFC 9116): malý textový súbor na pevnom mieste, https://<jouwdomein>/.well-known/security.txt.

Contact: mailto:security@example.com
Expires: 2027-10-31T23:00:00Z
Preferred-Languages: nl, en
Canonical: https://example.com/.well-known/security.txt

Pravidlá:

  • Contact je povinné: adresa mailto:, https:// alebo tel:, na ktorú prichádzajú hlásenia. Použite adresu, ktorú niekto naozaj číta.
  • Expires je povinné a smie sa vyskytnúť iba raz: dátum, po ktorom sa súbor považuje za zastaraný. RFC odporúča dátum do jedného roka. Tak nezostane visieť súbor s dávno zabudnutou adresou. Zapíšte si do kalendára, kedy ho treba predĺžiť.
  • Preferred-Languages, Canonical a Policy (odkaz na vaše pravidlá pre hlásenia) sú voliteľné.
  • Súbor musí prichádzať cez https ako čistý text (text/plain, UTF-8). Staré miesto /security.txt môžete použiť navyše, ale /.well-known/ má prednosť.

Umiestnenie pri statickej stránke:

anna@web1:~$ sudo mkdir -p /var/www/example.com/.well-known
anna@web1:~$ sudoedit /var/www/example.com/.well-known/security.txt
anna@laptop:~$ curl -sI https://example.com/.well-known/security.txt | grep -i content-type
content-type: text/plain; charset=utf-8

Ak v nginx používate záchrannú sieť location ~ /\. { deny all; } z lekcie 7.2, dajte pred ňu výnimku: location ^~ /.well-known/ { }. Pri aplikácii za reverznou proxy môžete v Caddy nasmerovať cestu /.well-known/security.txt na súbor pomocou bloku handle a file_server.

Častá chyba: stránka alebo aplikácia, ktorá na každú neznámu cestu odpovie úvodnou stránkou so stavom 200. Potom security.txt "existuje", ale je to HTML. Kontrolujte preto aj obsah.

Na AlmaLinux a Rocky Linux

Caddy tam získate zo zdroja jeho autorov alebo z EPEL/COPR. Rovnako ako pri nginx musí SELinux povoliť reverznú proxy (setsebool -P httpd_can_network_connect 1). Caddyfile aj hlavičky sú rovnaké.

Zhrnutie

  • Caddy sám rieši certifikáty, ich obnovovanie a presmerovanie na https; reverse_proxy automaticky odovzdá správne hlavičky.
  • HSTS zabezpečí, že si prehliadače zapamätajú, že vaša stránka je iba na https; max-age zvyšujte postupne, s includeSubDomains buďte opatrní a s preload veľmi opatrní.
  • Okrem toho nastavte X-Content-Type-Options: nosniff, frame-ancestors 'self' a Referrer-Policy; v Caddy pomocou header, v nginx pomocou add_header ... always, a skontrolujte to príkazom curl -I.
  • security.txt je na /.well-known/security.txt, cez https, ako čistý text, s povinným Contact a jedným Expires do jedného roka.

Kvíz

1. Prečo HSTS pomáha, keď už presmerovávate http na https?



2. Nastavíte HSTS s max-age=31536000; includeSubDomains. O týždeň sa ukáže, že camera.example.com nemá platný certifikát. Čo zaznamenajú návštevníci, ktorí vašu stránku už predtým navštívili?



3. Ktoré polia sú v security.txt povinné?



4. V nginx máte bezpečnostné hlavičky v bloku server, ale pri /api/ sa neposielajú. V bloku location /api/ je jedna vlastná add_header. Čo sa deje?



5. Čo musíte urobiť predtým, ako do hlavičky HSTS pridáte preload?



Úloha

Úloha Z7.4: HSTS, hlavičky a security.txt. Nastavte pre svoju stránku HSTS (aspoň 180 dní, keď už https nejaký čas spoľahlivo funguje), X-Content-Type-Options: nosniff a frame-ancestors 'self' (alebo X-Frame-Options) a zverejnite security.txt s Contact a Expires do jedného roka. Zadajte názov hostiteľa. Program načíta https://<hostnaam>/ a skontroluje hlavičky, potom načíta https://<hostnaam>/.well-known/security.txt a skontroluje polia. Neukladá nič okrem výsledku a dátumu Expires.

Úloha Z7.4: HSTS, hlavičky a security.txt

Iba pre prihlásených účastníkov kurzu. Načítame https://<naam>/ a /.well-known/security.txt (iba GET).




Čo vyplníte a čo nájdeme, neukladáme. Váš prehliadač si pamätá vaše odpovede a to, či ste úlohu splnili. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že úloha bola (takmer) správne vyriešená; aj to tam môžete odstrániť.

Ďalšie čítanie

Chvíľu strpenia…

Nastavte svoje domény

Pri každej doméne nastavte nameservery, prepojenie s hostingom a to, kto bude jej vlastníkom.

Načítavajú sa vaše domény…