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
Hostumož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 reloadpoš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-Cookiese 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: Basicpožá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.