Генерирањето клуч не бара привремена датотека, а нејзиното прескокнување поправа помалку отколку што сугерираат повеќето упатства. Она што го отстранува е животниот циклус на датотека и трката за чистење околу неа. Она што го остава недопрено е секоја можност тајната да истече подоцна. Проблемот со исправноста во овие скрипти обично седи на друго место, бидејќи дијагностиката и клучниот материјал патуваат по различни текови.

Датотеката никогаш не беше таа изложеност што мислевте

Привремената датотека е конкретен ризик кога е читлива за сите, кога преживува пад или кога по исклучок се прескокнува чекор за чистење. Тие се вистински и вреди да се поправат. Тие се и локални, видливи и лесни за тестирање. Именувајте го секој во сопствената скрипта пред да заклучите дека промената била само козметичка.

Потишите ризици седат низводно: клучот отпечатен при отстранување грешки, исклучокот што го серијализира целиот објект резултат, ракувачот со пад што пишува дамп на меморија, агрегаторот на дневници што ја прима патеката на датотеката и потоа содржината. Избегнувањето привремена датотека не прави ништо за ниту еден од нив, а верувањето во спротивното е начинот на кој добронамерно препишување ја остава тајната поизложена отколку порано. Третирајте ја промената како едно подобрување во низа, а не како решението.

Што пишува клиентот кога не е дадено име на датотека

Тековните верзии на клиентот го праќаат генерираниот клуч на стандардниот излез кога командата за клуч е дадена без излезна патека. Токму тоа документирано однесување го прави пристапот во меморија одржлив, и ја отстранува потребата од постариот трик да се насочи алатката кон патека на уред.

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

Предадете ја командата како листа. Тука не е потребно проширување од школка, а овозможувањето школка би ја направило границата на аргументите зависна од наводници што не ги контролирате. Користете ја предвидената извршна датотека по апсолутна патека ако скриптата може да работи со друга патека за пребарување од онаа што ја очекувате.

Проверката на кодот за враќање спречува патот на успех да продолжи по неуспешен повик. Без неа, празен бајт-стринг може да тече понатаму и да не успее само многу подоцна, во точката каде што клучот се користи и пораката за грешка веќе воопшто не го споменува генерирањето.

Два тека, две значења

Стандардниот излез го носи клучот. Стандардната грешка го носи сето она што алатката сака да ви го каже, вклучително предупредувања за конфигурацијата, верзијата и типот на клуч. Пренасочувањето на двете во еден бафер е грешката што произведува уверливо изгледачки клуч со зашиена реченица во средината.

Држете го одделно и патот на неуспехот. Кога повикот не успее, пријавете ја командата што не успеа и излезниот статус, а потоа свесно одлучете дали некој дел од стандардната грешка е безбеден за прикажување. Истурањето на целиот објект резултат во дневник е вообичаена кратенка, и може да го однесе клучот со себе.

Безбедно читање за бинарни податоци е важно ако подоцна го хеширате или споредувате материјалот. Текст режимот со неочекувано кодирање може да ги промени бајтите што никогаш не биле наменети да бидат текст, а променетиот клуч не се разликува од погрешен додека не падне ракувањето.

Ако сепак го чувате, направете го тоа свесно

Повеќето распоредувања на крајот бараат клучот на диск, на портата или во складиште за тајни. Запишете го еднаш, со ограничувачки дозволи од создавањето, а не со подоцнежен chmod, и направете го записот атомски за делумна датотека никогаш да не стане онаа што услугата ја чита при стартување. Преименувањето од патека во истиот директориум обично е доволно за тоа. Отстранете ја подготвителната патека во гранката за неуспех, бидејќи неуспешниот запис е токму копијата што луѓето ја забораваат.

Поставете го режимот на датотеката кога се создава, и држете го и режимот на директориумот ограничувачки. Избегнувајте која било патека под место што задача за резервна копија го мете без размислување, бидејќи тајна во ноќна резервна копија е тајна во секоја копија од таа резервна копија. Истото размислување важи и за споделен том што други услуги можат да го читаат.

Споделениот клуч не е идентитет

Генерирањето на овој материјал не издава сертификат, не запишува клиент и не утврдува кој се поврзува. Споделениот клуч штити канал меѓу страни што веќе си веруваат; идентитетот сепак доаѓа од сертификатот и од каква било автентикација пред него.

Типовите клучеви исто така не се заменливи. Симетричен клуч за една функција не е готов заменик за друга, а поновите изданија ги додаваат своите варијанти со различни датотеки на секој крај. Генерирајте го типот што вашата конфигурација навистина го именува, а потоа користете го во улогата што ја дефинира тој тип.

Тестирајте го резултатот со вистинска врска, а не со гледање на големината на датотеката. Ако ракувањето заврши и дневниците не покажат предупредувања за клуч, патот на генерирање е правилен; ако клучот бил скратен од споен тек, врската би паднала на начин што покажува кон другата страна, а не кон скриптата.

Поврзани статии