Veľmi pekný článok!
Mne v ňom chýba spomenúť, že v ďalšej verzii OpenSSH dôjde k vypnutiu ssh-rsa https://www.openssh.com/txt/release-8.7#:~:text=OpenSSH%20will%20disable%20the%20ssh,less%20than%20USD%2450K.
V návode by som preto pri vytváraní spomenul radšej alternatívne algoritmy ako ECDSA a ED25519 .. https://nbeguier.medium.com/a-real-world-comparison-of-the-ssh-key-algorithms-b26b0b31bfd9
Ten odstavec s PEM se moc nevydařil. To by chtělo opravit, začíná mluvit o souborovém kontejneru *.pem ale plynule přejde ke kontejnerům *.cer,*.crt,
Cituji "Patrně nejpoužívanější formát. Také může obsahovat jak privátní klíč, tak certifikáty. Používá přípony crt, cer a" Skutečně?
Do souborového kontejneru *.crt,*.cer uložit privátní klíč nejde. Pokud ano, prosím o postup pro ověření, protože mě se to nikdy nepodařilo. Soubory crt,cer slouží pouze pro uložení(vyexportování) certifikátu neboli veřejné části klíče.
V příponách souborů je v PKI hrozný … nepořádek. Nejsou určené přípony souborů pro konkrétní typy souborů. .pem říká jenom to, že obsah je ve formátu PEM – ale může to být certifikát, může to být privátní klíč, může tam být několik certifikátů a k nim i šifrovaný privátní klíč… .cer nebo .crt označuje soubor s certifikátem, ale neříká, v jakém je formátu. Může to být PEM, může to být formát DER uložený binárně, může to být formát DER kódovaný v BASE64 (což už je skoro PEM). DER nebo PEM ale také může být uložený s příponou .key nebo třeba .txt.
A do toho se slovo „certifikát“ běžně používá pro „soubor s certifikátem a privátním klíčem“ (třeba PFX, ale zase to může být i PEM nebo něco jiného).
Takže uložit privátní klíč do souboru s příponou .cer je dost matoucí, ale v kontextu toho zmateného názvosloví bych se vlastně vůbec nedivil, kdyby to někdo udělal.
Zas tak strasny to neni (je to tam i s obrazkem). V definici to celkem prehledne je... chaos si do toho vnasi lidi sami :)
Takhle nakreslené to vypadá samozřejmě lépe, než jsem to popsal. Že tam je .cer dvakrát si člověk ani nemusí všimnout… A pak tam není uvedené, co je certifikát, co privátní klíč.
Ale oceňuji, jak mistrně se vyhýbají tomu, aby nikde nebylo napsáno „certificate can store the server certificate, the intermediate certificate and the private key“, i když všechny ty soubory nazývají „certificate“, jak je běžné.
Ak by mal niekto zaujem urobit si file based CA s root a intermediate certifikatom tu su shell prikazy ktore by vam mali pomoct:
https://drive.google.com/file/d/1dRQkGi1-ACTPyMIREAZJFsuOU2PadxfW/view?usp=sharing
Jakoze je tezky mit renewal-hook, co v danem prostredi zajisti distribuci kam je potreba..?
Ne, neplete si pojmy. K jednomu doménovému jménu může být vystaven libovolný počet certifikátů. Takže když potřebujete mít na více serverech pro stejné doménové jméno certifikát, můžete mít na všech serverech ten stejný certifikát (pro stejnou klíčovou dvojici), nebo na každém serveru unikátní certifikát (pro unikátní dvojici klíčů), nebo mix – jeden certifikát bude na některých serverech, na jiných serverech bude jiný certifikát.
Pokud chcete unikátní certifikát na každém serveru, v ničem se to neliší od případu, kdy by ten server byl jen jeden (pokud serverů nejsou stovky, pak byste asi narazil na limity LE).
Pokud chcete certifikát vystavit jednou a rozkopírovat na více míst, na to existují různá řešení – záleží, zda chcete jen vystavit certifikát a jeho distribuci si chcete zajistit sám, nebo zda chcete kompletní systém, který zajistí i distribuci certifikátu (případně privátního klíče, ale tomu bych se spíš vyhnul).
Ukazte mi ta reseni.
Bavim se o situaci, kdy se kazdy den musi kontrolovat platnost certifikatu (protoze plati jen 3 mesice), coz znamena, ze kazda domena se po 2 mesicich ucastni procesu vystaveni noveho certifikatu, nasledne je potreba ten konkretni certifikat rodistribuovat na X serveru v ruznych zonach, klidne i ruznych typu (napr. kombinace reverzni proxy & web server). Konfigurace takovych serveru je v nejakem konfig managementu, certifikaty jsou casto v gitu stejne jako zdrojaky.
A pokud nemate kompletni CI/CD na ten konfig management, tak chci videt, jak v takovem pripade automaticky distribuujete/gitujete/rekonfigurujete/reloadujete ruzne sluzby na ruznych serverech.
Uniká mi architektura systému, který řešíte. Není to HTTPS, kde byste na loadbalancerech dělal terminaci TLS a rozvažování zátěže. Řešíte to pro stovky serverů, ale nemáte automatizovanou jejich konfiguraci. Pro jedno doménové jméno dáváte certifikát na X serverů – ani nevíme, zda jsou to servery stejné služby, nebo jsou to různé služby. Do toho nasazujete aplikace přímo z gitu.
Připadá mi, že máte N různých způsobů použití, každý řešíte jinak s jinou mírou automatizace, a na to se snažíte napasovat nějaký jeden univerzální systém pro výměnu certifikátů.
V uvazovanem pripade je to primarne https webova sluzba.
Provozujeme sluzbu somedomain.tld. Ta je terminovana na nekolika L7 balancerech (x serveru, kde se nahrava certifikat). Nasledne je dany certifikat nahrany i na web backendech (Y serveru) - spojeni mezi balancerem a web serverem je zasadne sifrovane.
Tyto servery se konfiguruji pres ansible, pricemz git je pouzit primarne jako dokumentace zmen. Nemame Tower, ani jiny automaticky CI/CD, takze zmeny se volaji manualne - zmen u nas neni tolik. Jenze u let's encrypt uz z principu manualni volani zmen je nepouzitelne.
A do toho by se hodilo pouzivat let's encrypt. Kdyz nasadim nejakeho centralniho bota, tak ten bot nebude mit seznam serveru, ani ansible to nevi, kde ty certifikaty jsou, dokud nenacte konfiguraci tech balanceru/web serveru. Takze se pak bavime klidne o spusteni konfigurace na stovkach serveru (i kdyz zmena bude jen na X+Y).
Pak je potřeba řešit ty L7 balancery. Záleží na tom, co je to zač – třeba Caddy má podporu pro ACME vestavěnou, pro nginx nebo HAproxy se dá použít jedna z mnoha implementací ACME klienta. Pokud je to nějaké HW řešení, F5 apod., potřebujete ty certifikáty obnovovat nějakým skriptem z venku (zase stačí si vybrat z výše odkázaného seznamu) a pak je jen do zařízení nahrát. Doporučuju v takovém případě používat validaci přes DNS – nepotřebujete pak žádnou spolupráci toho balanceru, tomu jen dáte hotový certifikát.
Osobně bych v takovém případě nedistribuoval jeden certifikát na všechny balancery, ale (pokud nemáte těch balancerů desítky a vejdete se do limitů LE) měl bych na každém balanceru samostatný certifikát s vzájemně posunutým datem vydání. Ať vám nekončí platnost všech certifikátů najednou, ale je to pěkně rozdistribuované. Ono se to sice obnovuje automaticky, takže by to mělo být jedno, ale jistota je jistota, k chybě může dojít i u vás i na straně LE.
Dále tam máte ty backend servery. Pokud na nich neodkážete výměnu certifikátů snadno zautomatizovat, dejte tam selfsigned certifikáty nebo certifikáty z vlastní autority s platností několik let. (Bacha na to, že jak se před pár měsíci přesvědčili ve Flexibee, deset let je už dost dlouhá doba na to, aby se zapomnělo, že vůbec někde takový certifikát je.) Loadbalancerům je to jedno, ty nepotřebují na straně backendu všeobecně uznávané certifikáty – nastavíte tam buď svou autoritu nebo ty selfsigned certifikáty.
Na sifrovane spojeni mezi balancery a backendy LE certifikat opravdu nepotrebujete. Na tento ucel muzete klidne pouzit interni CA a klidne certifikaty s delsi platnosti. Takze cely "problem" se razem smrskne na to, jak dostat cerfifikat na par balanceru. A to uz tu popsane mate vyse - realne muze byt kazdy balancer v tomto smeru autonomni.
Já to vaše řešení neprovozuju, takže pro něj nemám hotové řešení distribuce certifikátů. Když máte certifikáty (asi i s privátními klíči) v gitu vedle zdrojáků (což bych já nikdy neudělal), potřebujete se zaháčkovat do procesu vydání certifikátu, aby po stažení certifikátu byl provolán nějaký váš skript, který ten certifikát commitne a pushne do gitu. Na to mají různí klienti podporu. A nebo prostě můžete cronem sledovat úložiště certifikátů, a pokaždé, když se tam objeví nový certifikát, commitnout a pushnout ho.
Nebo si kupte komerční certifikát s platností jeden rok.