PKI je infrastruktura pro ověřování totožnosti nebo šifrování komunikace. Je založena na public key kryptografii, což je druh kryptografie využívající dva klíče – privátní a z něj odvozený věřejný klíč. Chceme-li ověřovat totožnost, jedná se o tzv. digitální podpis, kde nějakou informaci zašifrujeme svým privátním klíčem a ostatní entity jsou schopny tuto informaci dešifrovat veřejným klíčem, který jsme jim předali. Při šifrování provádíme proces naopak: klienti přiděleným veřejným klíčem informaci šifrují, zatímco my ji privátním klíčem dešifrujeme (je tedy zajištěno, že dva klienti se stejným veřejným klíčem nemohou bez privátního klíče odposlouchávat přenos informace).
Pilíře PKI jsou v tzv. trust anchorech a chain of trust. Trust anchor je jakýsi záchytný bod, kterému z nějakého důvodu věříme – např. jsme se setkali osobně a daná entita mi ukázala doklad totožnosti a vyměnili jsme si veřejný klíč. Pokud k takovým výměnám vůči jedné entitě dojde častěji, je entita důvěrnějším bodem celého systému a dá se předpokládat, že když někomu věří, nemusíme se obávat věřit i my. Tímto tedy vzniká chain of trust, což je esenciálně řetěz důvěry, kde předpokládáme, že důvera je tranzitivní.
Pokud výše uvedené schéma uvedeme do aktuální PKI, trust anchory jsou tzv. certifikační autority (CA). Pokud od takové autority chceme získat důvěru, můžeme o to požádat skrze CSR, ke kterému ještě často přikládáme doklady dokazující naši existenci a identitu. CA dokáže tuto identitu ověřovat na 3 úrovních
Vzhledem k tomu, že CA je na nejnižší úrovni pouze self signed certifikát, existují i neveřejné, často privátní CA. Takovou autoritu si můžeme vytvořit i my, ovšem nemůžeme počítat s tím, že by došlo k její distribuci skrze různé kanály pro distribuci důvěryhodných autorit.
Obecně se budeme bavit o adresáři /etc/pki/, kde jsou relevantní 2 cesty: /etc/pki/ca-trusted/extracted/ (legacy) a /etc/pki/tls/certs/. Jedná se o cesty k našemu seznamu důvěryhodných autorit. Ukážeme si však hlavně konfiguraci autority privátní, která se provádí v /etc/pki/CA/ a jejíž konfigurace se nachází v /etc/ki/tls/openssl.cnf. Obecně když vytváříme CA a podepisujeme certifikát, potřebujeme provést následující úkony (za předpokladu cwd /etc/pki/CA/):
$ openssl req -x509 -nodes -newkey rsa:2048 -keyout private/cakey.pem -out cacert.pem
-> private/cakey.pem je privátní klíč CA
-> cacert.pem certifikát CA
Vzhledem k defaultní konfiguraci je vhodné vytvořit následující soubory
$ echo ”01” > crlnumber
$ touch index.txt
$ openssl req -new -nodes -newkey rsa:2048 -keyout device.key -out device.csr
-> device.key je privátní klíč certifikátu
-> device.csr je CSR
$ openssl x509 -req -in device.csr -CA cacert.pem -CAkey private/cakey.pem -CAcreateserial -out certs/device.crt
-> cacert.srl je soubor obsahující sériové číslo certifikátu
-> certs/device.crt je konečný certifikát
Pro revokování certifikátů je nejdříve potřeba vytvořit CRL (ten musíme zveřejnit, chceme-li zaručit správnou funkcionalitu CA).
$ openssl ca -cert cacert.pem -keyfile private/cakey.pem -gencrl -out crl.pem
A následně provést samotnou revokaci:
$ openssl ca -revoke certs/device.crt
DANE – DNS-based Authentication of Named Entities je systém, který PKI rozšiřuje i do DNS využítím DNSSEC. Je to tedy protokol pro certifikáty standardu X.509, který do DNS přidává TLSA záznamy. Jeho hlavním využítím je odstínění největší slabosti PKI – centralizovanosti. DANE je formulován v RFC 6698.
443. tcp.www.example.com. IN TLSA ( 0 0 1 d2abde240d7cd3ee6b4b28c54df034b97983a1d16e8a410e4561cb106618e971 )
Záznam na pravé straně obsahuje 3 čísla