14.4.4. Certifikáty podepsané CA (veřejně důvěryhodné)¶
Self-signed certifikáty fungují, když ovládáte oba konce spojení. Pokud se však ke kameře musí připojit libovolní klienti (prohlížeče, telefony, software třetích stran) bez toho, aby jim bylo řečeno, aby důvěřovali vlastnímu certifikátu, musí být certifikát podepsán veřejnou certifikační autoritou (CA), které tito klienti již důvěřují. TLS kód na kameře je shodný se self-signed případem – load_cert_chain s certifikátem a klíčem ve formátu DER – mění se pouze způsob, jakým daný certifikát získáte.
Naprosto nejdůležitější bod: soukromý klíč si generujete sami a nikdy neopustí váš počítač. CA jej nikdy nevidí. To, co CA posíláte, je žádost o podpis certifikátu (CSR) – malý soubor obsahující váš veřejný klíč a vaše doménové jméno – a to, co dostanete zpět, je certifikát (váš veřejný klíč a jméno, podepsané CA). Klíč a certifikát jsou dva samostatné soubory vytvořené dvěma samostatnými kroky; CA pracuje vždy jen s veřejnou polovinou.
Obecný postup, celý prováděný na běžném počítači (nikdy na kameře):
Získejte doménové jméno. Veřejné CA certifikují DNS jméno, které ovládáte (např.
cam.example.com); nevystaví certifikát pro holou IP adresu ani pro pouze lokální jméno jakomycam.Vygenerujte klíč a CSR. Jeden příkaz OpenSSL vytvoří soukromý klíč a odpovídající CSR. Použijte stejný typ klíče, jaký byste použili pro self-signed certifikát (viz Koncepty: důvěra, klíče a formát souboru); doporučuje se ECDSA P-256.
ECDSA P-256 – doporučeno:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
ECDSA P-384 – silnější, větší/pomalejší:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
RSA-2048 – maximální kompatibilita:
openssl req -new -newkey rsa:2048 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
Uchovejte
domain.keyv tajnosti – toto je soubor s klíčem, který nakonec umístíte na kameru.domain.csrje soubor, který předáváte CA; neobsahuje žádná tajemství.Odešlete CSR a prokažte, že doménu ovládáte. Zde se dvě běžné cesty liší:
Automatizovaná ACME CA, jako je Let’s Encrypt, řízená nástrojem jako
certbotneboacme.sh, provede kroky 2 a 3 za vás: vygeneruje klíč, sestaví CSR, automaticky odpoví na výzvu (HTTP-01: poskytne token přes port 80 na doméně, nebo DNS-01: publikuje TXT záznam v jejím DNS) a zapíše hotové soubory.Komerční CA (zakoupená přímo nebo přes prodejce domén/hostingu): text
domain.csrvložíte do webového formuláře, poté prokážete kontrolu odpovědí na validační e-mail, publikováním DNS záznamu nebo umístěním souboru na webový server této domény. Po ověření stáhnete vystavené soubory.
Posbírejte vystavené soubory. Abyste porozuměli tomu, co dostáváte, je užitečné vědět, že certifikáty tvoří řetězec důvěry: certifikát vaší domény je podepsán mezilehlou CA, která je zase podepsána kořenovou CA. Každý článek ručí za ten pod sebou. Skončíte s:
Vaším soukromým klíčem (z kroku 2). CA jej nikdy neměla; zůstává na vašem počítači a je to klíč, který nakonec umístíte na kameru.
Leaf certifikátem – nazývaným také koncový (end-entity) nebo serverový certifikát. To je certifikát pro vaši konkrétní doménu (
cam.example.com): obsahuje váš veřejný klíč a vaše jméno a je podepsán mezilehlou CA. Toto je certifikát, který kamera předkládá k identifikaci sama sebe.Jedním nebo více mezilehlými certifikáty CA („řetězec“ neboli „CA bundle“). CA nepodepisuje váš leaf certifikát svým kořenovým certifikátem přímo – klíč kořenového certifikátu je uchováván offline a silně chráněn – takže podepisuje mezilehlým certifikátem, který je sám podepsán kořenovým. Mezilehlý certifikát je článek, který spojuje váš leaf certifikát nahoru ke kořenovému.
Kořenový certifikát je kotva důvěry: self-signed certifikát patřící CA, který sedí na vrcholu řetězce. Nedostáváte jej a nikdy jej nenasazujete, protože jej již má každý klient – operační systémy, prohlížeče, telefony a běhová prostředí jazyků se dodávají s vestavěným „úložištěm důvěry“ kořenových certifikátů. Klient důvěřuje vašemu leaf certifikátu tak, že prochází řetězec: již důvěřuje kořenovému certifikátu, kořenový ručí za mezilehlý a mezilehlý ručí za váš leaf certifikát. (Přesně tuto úlohu plní váš jediný
server.der/cafilev self-signed případě – tam jste vy svým vlastním kořenovým certifikátem.)Soubor fullchain je jednoduše leaf certifikát a mezilehlé certifikáty zřetězené do jednoho souboru, leaf jako první, záměrně bez kořenového certifikátu (posílat kořenový certifikát je zbytečné – klient důvěřuje pouze kořenovým certifikátům, které již má). Běžný server předkládá celý tento fullchain, aby jej kterýkoli klient mohl projít. Kamera to nedokáže: načítá a předkládá jeden certifikát – leaf – a nemůže zároveň poslat mezilehlé certifikáty, které vám CA dala.
Názvy souborů, které skutečně uvidíte: ACME nástroj jako
certbotzapisujeprivkey.pem(váš klíč),cert.pem(samotný leaf),chain.pem(samotné mezilehlé certifikáty) afullchain.pem(leaf + mezilehlé certifikáty). Komerční CA vám obvykle dá.crtpro leaf a.ca-bundlepro mezilehlé certifikáty, přičemž.keyje ten, který jste si vygenerovali sami.Převeďte a zkopírujte. Převeďte soukromý klíč a leaf certifikát do formátu DER a zkopírujte je na kameru přesně jako na Vlastnoručně podepsané certifikáty. Kamera je pak předkládá jako svůj serverový certifikát a standardní klienti spojení automaticky přijmou, protože CA již důvěřují – žádná konfigurace na straně klienta není potřeba.
Tip
V praxi se to, že kamera předkládá pouze leaf certifikát (a nikdy mezilehlé certifikáty), projeví takto:
Klienti, kteří již mají mezilehlý certifikát CA v cache – mainstreamové prohlížeče a HTTPS knihovny jej obvykle mají – si řetězec doplní sami a připojí se bez problémů.
Klienti, kteří spoléhají na to, že mezilehlý certifikát dodá server, při handshaku s kamerou selžou.
Pokud musí uspět každý možný klient, neukončujte veřejné TLS přímo na kameře. Umístěte před ni bránu / reverzní proxy, která vnějšímu světu poskytuje celý řetězec, a nechte proxy komunikovat s kamerou přes self-signed postup popsaný výše.