Pse openssl rand nuk mund të krijojë çelësin që kërkon tls-crypt
OpenSSL prodhon bajt të rastësishëm; tls-crypt kërkon një skedar të strukturuar çelësi statik, dhe tls-crypt-v2 kërkon një çelës që vetëm serveri mund ta mbështjellë. Përdorni openvpn --genkey.
OpenSSL është tashmë i instaluar, hosti ka entropi, dhe të gjenerosh një çelës me të duket si shkurtesa e dukshme. Prodhimi do të jetë i rastësishëm dhe sekret dhe plotësisht i papërdorshëm, dhe dështimi vjen si gabim i kanalit të kontrollit në vend të diçkaje që përmend një format çelësi. Ky keqorientim është pjesa e kushtueshme, sepse i dërgon njerëzit të inspektojnë shifrat e tyre. Ajo që lexon VPN është një strukturë e caktuar skedari, jo një bllok arbitrar bajtësh, dhe një variant i funksionit nuk mund të prodhohet fare jashtë serverit.
Çfarë duhet të jetë në të vërtetë skedari në disk
Një skedar çelësi statik i OpenVPN është tekst. Fillojnë me një rresht komenti që deklaron çfarë është, mban të dhëna heksadecimale në rreshta me gjerësi fikse dhe në total përbën 256 bajt material çelësi. OpenVPN e lexon atë si sekretin e përbashkët të kanalit të kontrollit, jo si certifikatë, jo si frazë fjalëkalimi dhe jo si diçka që një bibliotekë TLS do të njihte.
I njëjti lloj objekti shërben të dyja funksionet e kanalit të kontrollit. Me tls-auth, çdo palë ka nevojë edhe për një drejtim, në mënyrë që paketat e njërës anë të mos reflektohen mbrapsht drejt saj. Me tls-crypt, një sekret i vetëm i përbashkët kripton dhe vërteton kanalin e kontrollit në të dy drejtimet, gjë që e fsheh shtrëngimin e duarve dhe njëkohësisht e mbron.
Asnjë prej këtyre nuk është njohuri sekrete, dhe formati nuk është çështja. Çështja është që skedari duhet të përputhet saktësisht me atë që pret lexuesi: koka, gjerësia e rreshtit, rreshti i fundit i ri dhe gjatësia totale. Një skedar që është një rresht mënjanë ngarkohet si mbeturina ose dështon plotësisht. Krahasimi i dy palëve bajt për bajt është pra një test i parë i ligjshëm, dhe është më i shpejtë sesa leximi i cilido prej dy skedarëve të konfigurimit.
Mënyra e mbështetur për të krijuar një
Gjeneroni çelësin e thjeshtë statik me mjetin që do ta përdorë, pastaj referojuni atij nga të dy skajet:
openvpn --genkey secret /etc/openvpn/tc-shared.key
tls-crypt /etc/openvpn/tc-shared.key
Shkrimi i opsionit ndryshoi me kalimin e kohës: instalimet më të vjetra të epokës 2.4 përdornin një formë me një flamur të veçantë përpara emrit të skedarit, ndërsa ndërtimet aktuale pranojnë atë më të shkurtër. Sidoqoftë, skedari që rezulton është i njëjti lloj objekti, kështu që kontrolli është nëse të dy palët mbajnë bajt identikë.
Gjenerata e dytë shton një strukturë që asnjë gjenerator i jashtëm nuk mund ta shpikë. Një çelës serveri krijohet një herë, dhe çdo klient merr një çelës të mbështjellë të nxjerrë prej tij:
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
Ajo që merr klienti nuk është çelësi vetë i serverit i dubluar. Është një objekt i mbështjellë që mban metadata që vetëm serveri mund t'i shpaketojë, dhe pikërisht kjo mbështjellje është arsyeja pse një skedar për pajisje mund të revokohet pa prekur asnjë pajisje tjetër. Mbani çelësin e serverit në server dhe trajtojeni si rrënjën e asaj besueshmërie për pajisje.
Ku shemben bajtët e bërë me dorë
Shtypja e 256 bajtëve të rastësishëm si heks nën një kokë të saktë do të jepte, në teori, një skedar çelësi statik që ngarkohet. Mbetet një ide e keqe. Çdo detaj formatimi bëhet një shans për të prodhuar material që dështon në ngarkim ose, më keq, lë dy palë me vlera të ndryshme që zbulohen vetëm si dështim vërtetimi.
Asgjë ekuivalente nuk është e mundur me variantin v2. Një çelës klienti i mbështjellë ekziston vetëm si dalje e procesit të çelësit të serverit, dhe serveri mban materialin e nevojshëm për ta shpaketuar. Një bllok i rastësishëm do të refuzohet ose thjesht nuk do të arrijë ta deshifrojë, dhe asnjëri prej dy mesazheve nuk do të përmendë rastësinë.
Përputhshmëria e versioneve qëndron mbi të gjitha këto. Gjenerata e parë kërkon një version që e mbështet në të dy skajet, dhe e dyta kërkon përsëri një version më të ri. Një klient i ndërtuar përpara se funksioni të ekzistonte nuk mund të përfundojë një shtrëngim duarsh me një server që pranon vetëm material të mbështjellë, dhe dështimi që raporton tregon kanalin e kontrollit në vend të versionit.
Rrotullim pa i kyçur të gjithë jashtë
Rrotullimi i një sekreti të vetëm të përbashkët është një ushtrim koordinimi, jo teknik. Çdo klient duhet ta ketë skedarin zëvendësues në dorë përpara se serveri të tërheqë atë të mëparshmin, dhe çdo makinë që mban ende vlerën e vjetër dështon në atë moment. Mos e filloni atë rrotullim në mes të një dite pune.
Me rregullimin v2, rrotullimi është për pajisje: lëshoni një çelës të ri të mbështjellë për një makinë dhe tërhiqni atë të vjetrin vetëm për atë makinë. Ky është argumenti kryesor për të kaluar sapo çdo klient të jetë në një version që e mbështet.
Lejet e skedarit i përkasin të njëjtit bisedë. Çelësi duhet të jetë i lexueshëm vetëm nga llogaria që ekzekuton shërbimin, dhe nuk duhet të jetojë në të njëjtin depo me profilet që mbron. Referenca e OpenVPN 2.6 dokumenton format e gjenerimit dhe seksionet e materialit të çelësit, që është një burim më i mirë sesa një komandë e kopjuar nga një postim forumi.