Hylkääkö OpenVPN ensimmäisen rivin? Tiedosto on luultavasti UTF-16
Ensimmäisen rivin virhe, jossa on outoja merkkejä, tarkoittaa yleensä sitä, että profiili tallennettiin UTF-16-muodossa. Lue ensimmäiset tavut ja muunna tiedosto sitten oikein.
Virhe osoittaa .ovpn-tiedoston ensimmäiseen riviin ja lainaa jotain sekaisin menneiden kirjainten näköistä siinä kohdassa, jossa pitäisi lukea client. Tiedosto avautuu editorissasi moitteettomasti, ensimmäinen rivi lukee client ja direktiivi on täysin tavallinen. Molemmat havainnot pitävät paikkansa, koska editori purkaa tavut ja asiakasohjelma ei. Se, mitä näet, on lähes aina koodausongelma, ei syntaksiongelma.
Myytti: editori näyttää sinulle tiedoston
Tekstieditori purkaa tavut merkeiksi koodauksella, jonka se joko tunnistaa tai arvaa. Kun se arvaa UTF-16:n, tiedosto näyttää ruudulla täydelliseltä, vaikka alla olevat tavut ovat pareja ja jokaisen latinalaisen kirjaimen jälkeen tulee nollatavu. OpenVPN lukee ne tavut merkkeinä, ja ristiriita ilmenee ensimmäisessä direktiivissä, jota se yrittää jäsentää.
Niinpä näkyvä rivi ja toimitettu rivi ovat kaksi eri asiaa. Näkemiesi outojen merkkien poistaminen on muutos näyttämisessä, ei koodauksessa, ja seuraava jäsennys epäonnistuu samasta syystä hieman erilaisella viestillä. Siksi virheen merkin perässä juokseminen ei johda koskaan mihinkään. Tavut ovat väärin lähteessä, ja jokainen myöhempi lukija arvaa saman rikkinäisen jonon.
Vian konkreettinen muoto kannattaa tunnistaa, koska se on tietyllä tavalla diagnostinen. Merkki aivan tiedoston alussa profiilissa, joka on muuten toiminut toisilla koneilla, on tavujärjestyksen eikä sanaston kysymys.
Mitä ensimmäiset tavut todella sanovat
Lue tavuja merkkien sijaan. Kaksi pientä komentoa selvittää asian sekunneissa, eikä kumpikaan vaadi tiedoston avaamista sovelluksessa, joka voisi muuttaa sitä:
file client.ovpn
head -c 24 client.ovpn | od -An -tx1
Etsimäsi kuvio on pari alkutavuja, jota seuraa teksti, jossa joka toinen tavu on nolla. FF FE merkitsee UTF-16 little-endian -koodausta, FE FF big-endian -koodausta ja EF BB BF UTF-8-koodausta, jossa on tavujärjestysmerkki. Tavallinen UTF-8-tiedosto ilman merkkiä alkaa suoraan ensimmäisen kirjaimen tavusta.
Kirjainten väliset nollatavut paljastavat asian. UTF-16 little-endian -koodauksessa sana client vie kaksitoista tavua kuuden sijaan, koska jokaista ASCII-merkkiä seuraa nolla. Sitä rakennetta ei editorin näyttö voi sinulle näyttää, eikä kahden tavun poisto voi sitä poistaa.
Tässä on tärkeä vivahde: OpenVPN:n asetustiedoston lukija todella ohittaa UTF-8-tavujärjestysmerkin tiedoston alussa, kuten version 2.6 asetusten lukija osoittaa. Se suvaitsevaisuus koskee juuri tuota merkkiä, eikä se tee mitään UTF-16-tiedostolle, jonka kirjaimet on täytetty nollilla. Kahden merkin pitäminen samana ongelmana on myytin toinen puoli.
Muuntaminen on tallenna nimellä, ei poistamista
Säilytä koskematon kopio operaattorin alkuperäisestä ennen kuin teet mitään, ja työskentele erillisellä tiedostolla. Profiili voi sisältää yksityisen avaimen tai tilitietoja, joten kopio on sekä peruutuksesi että viitteesi.
Tee sitten varsinainen koodauksen muunnos joko editorin nimenomaisen koodausvalikon kautta tai muuntimella, joka ilmoittaa tulo- ja lähtökoodauksensa:
iconv -f UTF-16 -t UTF-8 client.ovpn > client-utf8.ovpn
file client-utf8.ovpn
Varmista tulos sen sijaan, että luottaisit komennon poistumistilaan. Muunnoksen pitäisi säilyttää jokainen direktiivi, ja sen on säilytettävä jokainen upotettu varmenne- tai avainlohko tavu tavulta merkkiensä sisällä. PEM-tietojen uudelleenkääre, rivinvaihtojen muuttaminen lohkon sisällä tai profiilin uudelleenmuotoilu muunnoksen aikana luo uuden ongelman samalla kun vanha korjataan.
Osoita asiakasohjelma tai palvelu muunnettuun tiedostoon ja katso ensimmäistä virhettä, jonka se raportoi. Jos sekaisin mennyt merkki on poissa, koodaustyö on tehty, ja kaikki sen jälkeen epäonnistuva on eri kysymys.
Mitä korjattu koodaus ei korjaa
Koodaus määrää, miten teksti luetaan; se ei kerro mitään siitä, ovatko asetukset kelvollisia edessäsi olevalle asiakasohjelmalle. Toiselle toteutukselle viety profiili voi jäsentyä puhtaasti ja silti tulla hylätyksi asetuksen vuoksi, jota käynnissä oleva koontiversio ei tue, tai direktiivin vuoksi, jonka argumentti tarkoittaa siinä asiakasohjelmassa jotain muuta.
Ne myöhemmät virheet ansaitsevat oman tutkintansa: tarkan kirjoitusasun, argumentin syntaksin ja version, joka hyväksyy sen. Älä pidä onnistunutta jäsennystä onnistuneena profiilina.
Pidä tutkinta paikallisena, kun olet siinä. Julkiset verkkopalveluiden muuntimet ja liitetyt hex-tulosteet ovat huono paikka tiedostolle, joka voi sisältää yksityisen avaimen, koska koodausongelma on helppo korjata ja vuotanut avain ei.