Sleutelskepping het nie 'n tydelike lêer nodig nie, en om een oor te slaan regstel minder as wat die meeste gidse voorgee. Wat dit verwyder, is 'n lêerlewensiklus en die opruimwedloop daaroor. Wat dit onaangeroer laat, is elke geleentheid om die geheim daarna te lek. Die korrektheidsprobleem in hierdie skripte sit gewoonlik elders, want diagnostiek en sleutelmateriaal reis op verskillende strome.

Die lêer was nooit die blootstelling wat jy gedink het nie

'n Tydelike lêer is 'n konkrete risiko wanneer dit vir almal leesbaar is, wanneer dit 'n ineenstorting oorleef, of wanneer 'n opruimstap ná 'n uitsondering oorgeslaan word. Dié is werklik, en dit is die moeite werd om reg te maak. Hulle is ook plaaslik, sigbaar en maklik om te toets. Noem elkeen in jou eie skrip voordat jy aflei dat die verandering bloot kosmeties is.

Die stiller risiko's sit stroomaf: die sleutel wat tydens ontfouting gedruk word, die uitsondering wat die hele resultaatobjek serialiseer, die ineenstortingshanteerder wat 'n kernstorting skryf, die logversamelaar wat die lêerpad en dan die inhoud ontvang. Om 'n tydelike lêer te vermy, doen niks vir enige van dié nie, en om anders te glo, is hoe 'n goedbedoelde herskrywing die geheim meer blootgestel laat as voorheen. Behandel die verandering as een verbetering in 'n reeks, nie as die oplossing nie.

Wat die kliënt skryf wanneer geen lêernaam gegee word nie

Huidige weergawes van die kliënt stuur die geskepte sleutel na standaarduitset wanneer die sleutelopdrag sonder 'n uitsetpad gegee word. Daardie gedokumenteerde gedrag is wat die in-geheue-benadering lewensvatbaar maak, en dit verwyder die behoefte aan die ouer truuk om die gereedskap na 'n toestelpad te wys.

import subprocess
proc = subprocess.run(
    ["openvpn", "--genkey", "tls-crypt"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    check=True,
)
key_material = proc.stdout

Gee die opdrag as 'n lys. Daar is geen skul-uitbreiding hier nodig nie, en om 'n skul te aktiveer, sou die argumentgrens laat afhang van aanhalingstekens wat jy nie beheer nie. Gebruik die beoogde uitvoerbare lêer by absolute pad as die skrip met 'n ander soekpad kan loop as wat jy verwag.

Die terugkeerkodekontrole verhoed dat die suksespad ná 'n mislukte oproep voortgaan. Sonder dit kan 'n leë greepstring verder vloei en eers veel later faal, by die punt waar die sleutel gebruik word en die foutboodskap glad nie meer sleutelskepping noem nie.

Twee strome, twee betekenisse

Standaarduitset dra die sleutel. Standaardfout dra alles wat die gereedskap jou wil sê, insluitend waarskuwings oor die konfigurasie, die weergawe en die sleuteltipe. Om albei na een buffer te herlei, is die fout wat 'n geloofwaardig lykende sleutel lewer met 'n sin in die middel daarvan ingewerk.

Hou die mislukkingspad ook apart. Wanneer die oproep misluk, rapporteer die opdrag wat misluk het en die uittredestatus, en besluit dan doelbewus of enige deel van standaardfout veilig is om te wys. Om die volle resultaatobjek na 'n log te stort, is die gewone kortpad, en dit kan die sleutel saamdra.

'n Binêr-veilige lees is belangrik as jy die materiaal later hash of vergelyk. Teksmodus met 'n onverwagte enkodering kan grepe verander wat nooit bedoel was om teks te wees nie, en 'n veranderde sleutel is nie van 'n verkeerde te onderskei voordat 'n handdruk misluk nie.

As jy dit tog bewaar, doen dit doelbewus

Die meeste ontplooiings het uiteindelik die sleutel op skyf nodig, op die poort of in 'n geheimbewaarplek. Skryf dit een keer, met beperkende regte vanaf skepping eerder as 'n latere chmod, en maak die skryf atomies sodat 'n gedeeltelike lêer nooit die een word wat 'n diens by die begin lees nie. 'n Hernoeming vanaf 'n pad in dieselfde gids is gewoonlik genoeg daarvoor. Verwyder die stagingspad op die mislukkingsvertakking, want die mislukte skryf is juis die kopie wat mense vergeet.

Stel die lêermodus wanneer die lêer geskep word, en hou ook die gidsmodus beperkend. Vermy enige pad onder 'n ligging wat 'n rugsteuntaak sonder nadenke opvee, want 'n geheim in 'n nagtelike rugsteun is 'n geheim in elke kopie van daardie rugsteun. Dieselfde redenasie geld vir 'n gedeelde volume wat ander dienste kan lees.

'n Gedeelde sleutel is nie 'n identiteit nie

Om hierdie materiaal te skep, lewer nie 'n sertifikaat uit nie, skryf nie 'n kliënt in nie en stel nie vas wie verbind nie. Die gedeelde sleutel beskerm 'n kanaal tussen partye wat mekaar reeds vertrou; identiteit kom steeds van die sertifikaat en watter verifikasie ook al daarvoor sit.

'n Sleuteltipe is ook nie met 'n ander verwisselbaar nie. 'n Simmetriese sleutel vir een funksie is nie 'n invoegvervanging vir 'n ander nie, en nuwer weergawes voeg hul eie variante by met verskillende lêers aan elke kant. Skep die tipe wat jou konfigurasie werklik noem, en gebruik dit dan in die rol wat daardie tipe definieer.

Toets die resultaat met 'n werklike verbinding eerder as deur die lêergrootte te ondersoek. As die handdruk voltooi en die logs geen sleutelwaarskuwings toon nie, is die skeppingspad reg; as die sleutel deur 'n saamgevoegde stroom afgekap is, sou die verbinding misluk op 'n manier wat na die eweknie wys eerder as na die skrip.

Verwante artikels