PKI
"PKI (public key infrastructure) je označení infrastruktury pro distribuci a správu (tvorbu, využití a zneplatnění) veřejných klíčů a digitálních certifikátů."[1]
-
integrita
-
nepopíratelnost
-
důvěrnost
-
Privátní klíč
-
Veřejný klíč
-
Certifikát
-
Certifikační autorita (CA)
-
Certificate signing request (CSR)
-
Certificate revocation list (CRL)
Certifikáty a CA
-
hierarchická struktura důvěry
-
příklad: Let’s Encrypt[2]
-
Certificate Version Number Serial Number Signature Algorithm ID Issuer Name Validity Not Before Not After Subject name // tady je země, kraj, město... Subject Public Key Info Public Key Algorithm Subject Public Key Issuer Unique Identifier (optional) Subject Unique Identifier (optional) Extensions (optional) ... Certificate Signature Algorithm Certificate Signature
$ openssl version -d
-
OPENSSLDIR/certs
- úložiště certifikátů
$ openssl x509 -in cert.pem -text
Self-signed certifikát a vlastní certifikační autorita
-
certifikát podepsaný sám sebou
-
např. kořenové certifikáty certifikačních autorit
$ openssl genrsa -des3 -out ca.key 4096
$ openssl req -new -key ca.key -out ca.csr -sha512
$ openssl ca -in ca.csr -out ca.crt -keyfile ca.key -selfsign -md sha512 -enddate 20330401235959Z
-
enddate (startdate) ve formátu ANS.1 GeneralizedTime[4]
-
oproti ANS.1 nepodporuje časové zóny a minuty a sekundy jsou povinné
-
$ openssl ca -out user.pem -in user.csr
Revokace certifikátu
$ openssl ca -revoke cert.pem
-
CRL - certificate revocation list
-
OCSP - Online Certificate Status Protocol
-
Dotaz na CA ohledně platnosti certifikátu
-
CA musí být online
-
Alternativy PKI
-
Web of Trust
-
decentralizované - není nutno spoléhat na jednu entitu (CA)
-
např. PGP
-
-
DANE (DNS-based Authentization of Named Entities)
-
pomocí DNSSEC
-
HTTP Protokol
-
přenost souborů po internetu - nejčastěji HTML
-
textový - čitelný člověkem
-
vznikl v letech 1989 - 90 v CERNu v rámci WWW (World Wide Web)[5]
-
zároveň vznikl také první HTTP klient (prohlížeč) WorldWideWeb, HTML a počátky httpd
-
HTTP požadavek a odpověď
GET /~kas/pv090 HTTP/1.1 Host: www.fi.muni.cz User-Agent: curl/8.10.1
HTTP/1.1 200 OK Date: Mon, 21 Oct 2024 12:51:52 GMT Server: Apache Last-Modified: Mon, 30 Sep 2024 13:44:37 GMT Content-Length: 4439 Content-Type: text/html; charset=utf-8 Content-Language: en <html> Tělo požadavku </html>
-
GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS, CONNECT
-
1xx - informační
-
2xx - úspěch
-
3xx - přesměrování
-
4xx - chyba na straně klienta
-
5xx - chyba na straně serveru
Verze HTTP
-
velmi jednoduchý
-
pouze metoda GET, žádné hlavičky, žádné status kódy
-
status kódy
-
hlavičky
-
možnost přenosu i jiných dokumentů, než HTML (hlavička
Content-Type
)
-
hlavička
Connection: Keep-Alive
-
dosud každý nový požadavek znamenal nové TCP spojení - zbytečně pomalé
-
-
hlavička
Host
umožnila provozovat různé domény z jedné IP adresy
HTTP servery
-
mezi nejpopulárnější patří Apache a nginx[12]
-
konfigurace typicky v
/etc/nginx/nginx.conf
-
za běhu serveru ovládaný příkazem
nginx
-
např.
nginx -s reload
pošle signál pro znovunačtení konfigurace
-
-
jednoduchá direktiva
-
jméno a parametry, ukončené středníkem
-
např.
listen 8080;
-
-
bloková direktiva
-
místo středníku další instrukce ve složených závorkách
{}
-
-
bloková direktiva, která obsahuje další direktivy, se nazývá kontext
server { location / { root /data/www; } location /images/ { root /data; } }
-
doplňky do nginx
-
core modules nebo third-party
-
zapínáme direktivou
load_module
-
na debianu symlink z
/etc/nginx/modules-available/
do/etc/nginx/modules-enabled/
CGI skripty
-
generují dynamický obsah
-
HTTP server na základě požadavku spustí nějaký program a jeho standartní výstup pošle jako odpověď
Cookies
-
ukládání informací o stavu u klienta
-
hlavička
Set-Cookie
se jménem, hodnotou a Atributy-
např.
Set-Cookie: sessionToken=1337; Expires=Mon, 21 Oct 2024 18:00:00 GMT
-
-
session cookie - zaniká se zánikem session (typicky zavření okna prohlížeče)
-
persistent cookie - zaniká po datu v
Expires
-
klient musí cookies vždy poslat v požadavku:
Cookie: sessionToken=1337
Autentizace
-
klient chce autorizovaný zdroj
-
server pomocí hlavičky
WWW-Authenticate: Basic
požádá o přístupové údaje -
klient pomocí hlavičky
Authorization: Basic <hash údajů>
tyto údaje zašle -
není to šifrované! nutno používat HTTPS
Mezi další metody patří např. SPNEGO - protokol umožňující se domluvit na způsobu autentizace.