OpenSSL je už nainštalovaný, host má entropiu a generovať s ním kľúč sa zdá ako zjavná skratka. Výstup bude náhodný a tajný a úplne nepoužiteľný a zlyhanie príde ako chyba riadiaceho kanála, nie ako niečo, čo spomína formát kľúča. Práve toto zavádzanie je tá drahá časť, pretože posiela ľudí skúmať ich šifry. To, čo VPN číta, je určitá štruktúra súboru, nie ľubovoľný blok bajtov, a jeden variant tejto funkcie sa vôbec nedá vyrobiť mimo servera.

Čím súbor na disku skutočne musí byť

Súbor statického kľúča OpenVPN je text. Začína riadkom komentára, ktorý vyhlasuje, čo je, nesie hexadecimálne dáta v riadkoch pevnej šírky a celkovo obsahuje 256 bajtov kľúčového materiálu. OpenVPN ho číta ako zdieľané tajomstvo riadiaceho kanála, nie ako certifikát, nie ako prístupovú frázu a nie ako niečo, čo by rozpoznala knižnica TLS.

Ten istý typ objektu slúži obom funkciám riadiaceho kanála. Pri tls-auth potrebuje každý peer aj smer, aby pakety jednej strany nemohli byť odrazené späť naň. Pri tls-crypt jedno zdieľané tajomstvo šifruje a autentizuje riadiaci kanál v oboch smeroch, čo handshake skrýva a zároveň chráni.

Nič z toho nie je tajná znalosť a formát nie je pointa. Pointa je, že súbor musí presne zodpovedať tomu, čo čitateľ očakáva: hlavička, šírka riadku, záverečný koniec riadku a celková dĺžka. Súbor, ktorý je o jeden riadok vedľa, sa načíta ako smeti alebo úplne zlyhá. Porovnať dva peery bajt po bajte je preto legitímny prvý test a je rýchlejší než čítanie ktoréhokoľvek z dvoch konfiguračných súborov.

Podporovaný spôsob, ako jeden vytvoriť

Vygenerujte obyčajný statický kľúč nástrojom, ktorý ho bude spotrebúvať, a potom naň odkážte z oboch koncov:

openvpn --genkey secret /etc/openvpn/tc-shared.key
tls-crypt /etc/openvpn/tc-shared.key

Pravopis voľby sa v čase menil: staršie inštalácie z éry 2.4 používali formu so samostatným príznakom pred názvom súboru, zatiaľ čo súčasné buildy prijímajú kratšiu. V každom prípade je výsledný súbor rovnaký typ objektu, takže kontrolou je, či oba peery držia identické bajty.

Druhá generácia pridáva štruktúru, ktorú žiadny externý generátor nedokáže vymyslieť. Kľúč servera sa vytvorí raz a každý klient dostane zabalený kľúč odvodený z neho:

openvpn --genkey tls-crypt-v2-server /etc/openvpn/tc-v2-server.key
openvpn --genkey tls-crypt-v2-client /etc/openvpn/laptop1.key --tls-crypt-v2 /etc/openvpn/tc-v2-server.key

To, čo klient dostane, nie je duplikovaný vlastný kľúč servera. Je to zabalený objekt nesúci metadáta, ktoré dokáže rozbaliť iba server, a práve to zabalenie je dôvod, prečo možno súbor pre jedno zariadenie odvolať bez toho, aby sa dotkol akéhokoľvek iného zariadenia. Uchovávajte kľúč servera na serveri a berte ho ako koreň tejto dôvery pre jednotlivé zariadenia.

Kde sa ručne vyrobené bajty rúcajú

Vytlačiť 256 náhodných bajtov ako hex pod správnou hlavičkou by teoreticky dalo súbor statického kľúča, ktorý sa načíta. Stále je to zlý nápad. Každý detail formátovania sa stáva príležitosťou vyrobiť materiál, ktorý pri načítaní zlyhá, alebo, horšie, nechá dva peery s rozdielnymi hodnotami, ktoré sa prejavia až ako zlyhanie autentizácie.

S variantom v2 nie je nič ekvivalentné možné. Zabalený klientsky kľúč existuje len ako výstup procesu kľúča servera a server si ponecháva materiál potrebný na jeho rozbalenie. Náhodný blok bude odmietnutý alebo jednoducho zlyhá pri dešifrovaní a ani jedna zo správ nespomenie náhodnosť.

Kompatibilita verzií stojí na tom všetkom. Prvá generácia potrebuje vydanie, ktoré ju podporuje na oboch koncoch, a druhá zase potrebuje novšie vydanie. Klient zostavený pred existenciou funkcie nemôže dokončiť handshake so serverom, ktorý prijíma len zabalený materiál, a zlyhanie, ktoré hlási, ukazuje na riadiaci kanál, nie na verziu.

Rotácia bez zamknutia všetkých vonku

Rotácia jedného zdieľaného tajomstva je cvičenie v koordinácii, nie technické. Každý klient potrebuje náhradný súbor v ruke skôr, než server stiahne predchádzajúci, a každý stroj, ktorý ešte drží starú hodnotu, zlyhá v okamihu, keď sa to stane. Nezačínajte túto rotáciu uprostred pracovného dňa.

S usporiadaním v2 je rotácia po zariadeniach: vydajte nový zabalený kľúč pre jeden stroj a vyraďte starý len pre ten stroj. To je hlavný argument pre prechod, keď je každý klient na vydaní, ktoré to podporuje.

Oprávnenia súborov patria do tej istej konverzácie. Kľúč by mal byť čitateľný len pre účet, ktorý spúšťa službu, a nemal by žiť v tom istom repozitári ako profily, ktoré chráni. Referenčná príručka OpenVPN 2.6 dokumentuje formy generovania a sekcie o kľúčovom materiáli, čo je lepší zdroj než skopírovaný príkaz z príspevku na fóre.

Súvisiace články