Dir braucht keng temporär Datei fir en OpenVPN-Schlëssel ze generéieren
Schlësselmaterial am Späicher ze halen ëmgeet e Dateiliewenszyklus, kee Lach. Halt Ausgab- a Feelerstroum getrennt, a behaandel de Schlëssel duerno als Geheimnis.
D'Schlësselgeneréierung braucht keng temporär Datei, an se ewech ze loossen reparéiert manner wéi déi meescht Guide suggeréieren. Wat se ewech hëlt, ass e Dateiliewenszyklus an d'Opraamcourse ronderëm. Wat se onberéiert léisst, ass all Geleeënheet, d'Geheimnis duerno ze verroden. D'Korrektheetsprobleem an dëse Skripten sëtzt meeschtens soss anzwousch, well Diagnostik a Schlësselmaterial op verschiddenen Stréim reesen.
D'Datei war ni déi Expositioun, déi Dir geduecht hutt
Eng temporär Datei ass e konkrete Risiko, wann se fir jiddereen liesbar ass, wann se en Ofstuerz iwwerlieft, oder wann en Opraamschrëtt no enger Ausnam iwwerspronge gëtt. Dat ass richteg, an et ass der Müü wäert, et ze reparéieren. Se si lokal, sichtbar an einfach ze testen. Nennt jiddwereen an Ärem eegene Skript, ier Dir schléisst, d'Ännerung wier just kosmetesch.
Déi méi roueg Risike sëtzen ënnerstrëm: de Schlëssel, deen beim Debuggen ausgemaach gëtt, d'Ausnam, déi dat ganzt Resultatobjekt serialiséiert, de Crash-Handler, dee en Core-Dump schreift, den Aggregator vu Loggen, deen de Dateipad an duerno den Inhalt kritt. Eng temporär Datei ze vermeiden, mécht näischt fir ee vun hinnen, an dat Géigendeel ze gleewen ass de Wee, op deem eng gutt gemengt Ëmschreifung d'Geheimnis méi blouss léisst wéi virdrun. Behandelt d'Ännerung als eng Verbesserung an enger Rei, net als d'Léisung.
Wat de Client schreift, wann keen Dateinumm uginn gëtt
Aktuell Versioune vum Client schécken de generéierte Schlëssel op d'Standardausgab, wann de Schlësselbefehl ouni Ausgabpad uginn gëtt. Genau déi dokumentéiert Verhalen mécht den Approche am Späicher liewensfäeg, an et eliminéiert d'Notwendegkeet vum eelere Trick, d'Instrument op en Apparatepad ze riichten.
import subprocess
proc = subprocess.run(
["openvpn", "--genkey", "tls-crypt"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True,
)
key_material = proc.stdout
Gitt de Befehl als Lëscht. Et ass hei keng Shell-Expansioun noutwenneg, an eng Shell ze aktivéieren géif d'Argumentgrenz vu Quote ofhängeg maachen, déi Dir net kontrolléiert. Benotzt de virgesinn Exekutabel iwwer en absolute Pad, wann de Skript mat engem aneren Sichpad ka lafen wéi Dir erwaart.
D'Prüfung vum Retourcode verhënnert, datt de Erfollegspad no engem feelgeschloenen Opruff weiderlaf. Ouni se kann e leere Bytestring weiderfléissen an eréischt vill méi spéit feelen, op där Plaz, wou de Schlëssel benotzt gëtt an d'Feelermeldung d'Generéierung guer net méi ernimmt.
Zwee Stréim, zwou Bedeitungen
D'Standardausgab dréit de Schlëssel. De Standardfeeler dréit alles, wat d'Instrument Iech wëll soen, och Warnungen iwwer d'Konfiguratioun, d'Versioun an den Typ vum Schlëssel. Béides an ee Puffer ëmzeleeden ass de Feeler, deen en iwwerzeegend ausgesiende Schlëssel produzéiert mat engem Saz, dee mëttendran genait ass.
Halt de Feelerpad och getrennt. Wann den Opruff feelt, mellt de Befehl, dee feelgeschloen ass, an de Verloossstatus, an entscheet duerno bewosst, ob iergendeen Deel vum Standardfeeler sécher ze weisen ass. Dat ganzt Resultatobjekt an e Log ze kippen ass déi üblech Ofkierzung, an et kann de Schlëssel mat sech huelen.
E binärséchere Lies ass wichteg, wann Dir d'Material spéider hasht oder vergläicht. Den Textmodus mat enger onerwaarter Kodéierung kann Bytes änneren, déi ni als Text geduecht waren, an e geännerten Schlëssel ass vun engem falschen net z'ënnerscheeden, bis en Handshake feelt.
Wann Dir en awer späichert, maacht et bewosst
Déi meescht Deployementer brauchen de Schlëssel iergendwann op der Plack, um Gateway oder an engem Geheimnisspäicher. Schreift en eng Kéier, mat restriktiven Rechter vun der Kreatioun un anstatt engem spéideren chmod, a maacht d'Schreiwen atomar, sou datt eng deelweis Datei ni déi gëtt, déi en Déngscht beim Start liest. Eng Ëmbenennung vun engem Pad am selwechten Verzeichnis ass dofir meeschtens genuch. Läscht de Stagingpad am Feelerzweig, well dat feelgeschloent Schreiwen genau d'Kopie ass, déi d'Leit vergiessen.
Setzt de Dateimodus beim Uleeën, an halt de Verzeichnismodus och restriktiv. Vermeit all Pad ënner enger Plaz, déi en Backup-Job ouni Nodenken opschléift, well e Geheimnis an engem nuetleche Backup ass e Geheimnis an all Kopie vun deem Backup. Déiselwecht Iwwerleeung gëllt fir e gedeelt Volume, deen aner Déngschter liesen kënnen.
E gedeelte Schlëssel ass keng Identitéit
Dëst Material ze generéieren stellt kee Certificat aus, schreift kee Client an a setzt net fest, wien sech verbënnt. De gedeelte Schlëssel schützt e Kanal tëscht Parteien, déi sech schonn vertrauen; d'Identitéit kënnt nach ëmmer vum Certificat an vun enger Authentifikatioun, déi dovir sëtzt.
D'Schlësseltypen sinn och net ëmbennebar. En symmetresche Schlëssel fir eng Funktioun ass kee direkten Ersatz fir eng aner, an nei Verëffentlechunge bäifügen hir eegen Varianten mat ënnerschiddlechen Dateien op all Enn. Generéiert den Typ, deen Är Konfiguratioun tatsächlech nennt, a benotzt en duerno an der Roll, déi deen Typ definéiert.
Testt d'Resultat mat enger richteger Verbindung anstatt d'Dateigréisst ze inspectéieren. Wann den Handshake fäerdeg gëtt an d'Loggen keng Schlësselwarnungen weisen, ass de Generéierungswee richteg; wier de Schlëssel duerch e fusionéierte Stroum ofgeschnidden, géif d'Verbindung sou feelen, datt se op d'Géigesäit weist an net op de Skript.