Napaka kaže na prvo vrstico datoteke .ovpn in navaja nekaj, kar je videti kot pomešane črke tam, kjer bi moral biti client. Datoteka se v urejevalniku odpre brez težav, prva vrstica se bere client, direktiva pa je povsem običajna. Obe opažanji sta resnični, ker urejevalnik bajte dekodira, odjemalec pa ne. Kar vidite, je skoraj vedno težava s kodiranjem, ne s sintakso.

Mit: urejevalnik vam pokaže datoteko

Urejevalnik besedila dekodira bajte v znake s kodiranjem, ki ga bodisi zazna bodisi ugiba. Ko ugiba UTF-16, je datoteka na zaslonu videti brezhibna, medtem ko so bajti pod njo pari, za vsako latinično črko sledi ničelni bajt. OpenVPN te bajte bere kot znake in neskladje se pokaže pri prvi direktivi, ki jo poskusi razčleniti.

Torej vidna vrstica in dostavljena vrstica sta dve različni stvari. Brisanje čudnih znakov, ki jih vidite, je sprememba prikaza, ne kodiranja, in naslednje razčlenjevanje spodleti iz istega razloga z nekoliko drugačnim sporočilom. Zato iskanje žetona iz napake nikoli ne vodi nikamor. Bajti so napačni že pri viru in vsak nadaljnji bralec ugiba isto pokvarjeno zaporedje.

Konkretno obliko spodrsljaja je vredno prepoznati, ker je na poseben način diagnostična. Žeton na samem začetku datoteke, v profilu, ki je sicer deloval na drugih strojih, je vprašanje vrstnega reda bajtov in ne besedišča.

Kaj prvi bajti v resnici povedo

Berite bajte, ne znakov. Dva majhna ukaza to razrešita v sekundah in nobeden ne zahteva, da datoteko odprete v aplikaciji, ki bi jo lahko spremenila:

file client.ovpn
head -c 24 client.ovpn | od -An -tx1

Vzorec, ki ga iščete, je par uvodnih bajtov, ki mu sledi besedilo, v katerem je vsak drugi bajt ničla. FF FE označuje UTF-16 little-endian, FE FF big-endian, EF BB BF pa UTF-8 z oznako vrstnega reda bajtov. Navadna datoteka UTF-8 brez oznake se začne neposredno z bajtom prve črke.

Ničelni bajti med črkami so glavni namig. V UTF-16 little-endian beseda client zavzame dvanajst bajtov namesto šestih, ker vsakemu znaku ASCII sledi ničla. Te strukture vam zaslon urejevalnika ne more pokazati in brisanje dveh bajtov je ne more odstraniti.

Tu je pomembna podrobnost: bralnik konfiguracije OpenVPN resnično preskoči oznako vrstnega reda bajtov UTF-8 na začetku datoteke, kot kaže bralnik konfiguracije 2.6. Ta strpnost velja prav za to oznako in ne naredi ničesar za datoteko UTF-16, katere črke so zapolnjene z ničlami. Obravnavanje obeh oznak kot iste težave je druga polovica mita.

Pretvorba je shrani kot, ne brisanje

Preden karkoli storite, shranite nedotaknjeno kopijo izvirnika operaterja in delajte na ločeni datoteki. Profil lahko vsebuje zasebni ključ ali podatke računa, zato je kopija hkrati vaša pot nazaj in vaš referenca.

Nato izvedite resnično pretvorbo kodiranja, bodisi prek izrecnega menija za kodiranje v urejevalniku bodisi s pretvornikom, ki navaja vhodno in izhodno kodiranje:

iconv -f UTF-16 -t UTF-8 client.ovpn > client-utf8.ovpn
file client-utf8.ovpn

Preverite rezultat, namesto da bi zaupali izhodnemu stanju ukaza. Pretvorba bi morala ohraniti vsako direktivo in mora ohraniti vsak vdelan blok potrdila ali ključa bajt za bajtom znotraj njegovih oznak. Ponovno ovijanje podatkov PEM, spreminjanje koncev vrstic znotraj bloka ali preoblikovanje profila med pretvorbo ustvari novo težavo, medtem ko popravlja staro.

Usmerite odjemalca ali storitev na pretvorjeno datoteko in poglejte prvo napako, ki jo sporoči. Če je pomešani žeton izginil, je delo s kodiranjem končano in vse, kar po tem spodleti, je drugo vprašanje.

Česa popravljeno kodiranje ne popravi

Kodiranje določa, kako se besedilo bere; ne pove ničesar o tem, ali so možnosti veljavne za odjemalca pred vami. Profil, izvožen za drugo izvedbo, se lahko čisto razčleni in je vseeno zavrnjen zaradi možnosti, ki je delujoča gradnja ne podpira, ali zaradi direktive, katere argument v tem odjemalcu pomeni nekaj drugega.

Te poznejše napake si zaslužijo lastno preiskavo: natančen zapis, sintakso argumenta in različico, ki ga sprejme. Uspešnega razčlenjevanja ne imejte za uspešen profil.

Preiskavo imejte lokalno, dokler se z njo ukvarjate. Javni spletni pretvorniki in prilepljeni hex izpisi so slab kraj za datoteko, ki lahko vsebuje zasebni ključ, ker je težavo s kodiranjem lahko popraviti, uhajalnega ključa pa ne.

Sorodni članki