Ralat menunjuk ke baris pertama fail .ovpn dan memetik sesuatu yang kelihatan seperti huruf bercampur di tempat yang sepatutnya ada client. Fail terbuka dengan baik dalam editor anda, baris pertama membaca client, dan arahan itu sepenuhnya biasa. Kedua-dua pemerhatian itu benar, kerana editor menyahkod bait manakala klien tidak. Apa yang anda lihat hampir selalu masalah pengekodan, bukan masalah sintaks.

Mitos: editor menunjukkan fail kepada anda

Editor teks menyahkod bait menjadi aksara dengan pengekodan yang sama ada dikesan atau ditebaknya. Apabila ia meneka UTF-16, fail kelihatan sempurna di skrin sementara bait di bawahnya ialah pasangan, dengan satu bait sifar selepas setiap huruf Latin. OpenVPN membaca bait itu sebagai aksara, dan ketakpadanan muncul pada arahan pertama yang cuba dihuraikannya.

Jadi baris yang kelihatan dan baris yang dihantar ialah dua perkara berbeza. Memadam aksara pelik yang anda lihat ialah perubahan pada paparan, bukan pada pengekodan, dan penghuraian seterusnya gagal atas sebab yang sama dengan mesej yang sedikit berbeza. Itulah sebabnya mengejar token dalam ralat tidak pernah membawa ke mana-mana. Bait itu salah pada sumbernya, dan setiap pembaca di hilir meneka jujukan rosak yang sama.

Bentuk kegagalan yang khusus ini wajar dikenali, kerana ia bersifat diagnostik dengan cara tertentu. Token pada awal sekali fail, dalam profil yang biasanya berfungsi pada mesin lain, ialah persoalan susunan bait dan bukan persoalan kosa kata.

Apa yang sebenarnya dikatakan bait pertama

Baca bait, bukan aksara. Dua arahan kecil menyelesaikannya dalam beberapa saat, dan kedua-duanya tidak memerlukan fail dibuka dalam aplikasi yang mungkin mengubahnya:

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

Corak yang anda cari ialah sepasang bait pembuka diikuti teks yang setiap bait kedua ialah sifar. FF FE menandakan UTF-16 little-endian, FE FF menandakan big-endian, dan EF BB BF menandakan UTF-8 dengan tanda susunan bait. Fail UTF-8 biasa tanpa tanda bermula terus dengan bait huruf pertama.

Bait sifar antara huruf ialah petunjuknya. Dalam UTF-16 little-endian, perkataan client mengambil dua belas bait bukan enam, kerana setiap aksara ASCII diikuti sifar. Struktur itu bukan sesuatu yang paparan editor boleh tunjukkan kepada anda, dan bukan sesuatu yang pemadaman dua bait boleh hapuskan.

Ada nuansa penting di sini: pembaca konfigurasi OpenVPN memang melangkau tanda susunan bait UTF-8 pada permulaan fail, seperti yang ditunjukkan pembaca konfigurasi 2.6. Toleransi itu khusus untuk tanda itu, dan ia tidak melakukan apa-apa untuk fail UTF-16 yang hurufnya dipenuhi sifar. Menganggap kedua-dua tanda sebagai masalah yang sama ialah separuh kedua mitos itu.

Menukar ialah simpan sebagai, bukan padam

Simpan salinan asli pengendali yang tidak disentuh sebelum melakukan apa-apa, dan bekerja pada fail berasingan. Profil mungkin mengandungi kunci peribadi atau bahan akaun, jadi salinan itu ialah cara anda berundur dan rujukan anda.

Kemudian lakukan penukaran pengekodan sebenar, sama ada melalui menu pengekodan eksplisit editor atau dengan penukar yang menyatakan pengekodan input dan outputnya:

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

Sahkan hasilnya dan jangan percaya status keluar arahan. Penukaran itu harus mengekalkan setiap arahan, dan ia mesti mengekalkan mana-mana blok sijil atau kunci terbenam bait demi bait di dalam penandanya. Membalut semula data PEM, menukar hujung baris di dalam blok atau memformat semula profil semasa penukaran mencipta masalah baharu sambil membaiki yang lama.

Halakan klien atau perkhidmatan ke fail yang ditukar dan lihat ralat pertama yang dilaporkannya. Jika token bercampur itu hilang, kerja pengekodan selesai dan apa sahaja yang gagal selepas itu ialah persoalan lain.

Apa yang tidak dibaiki oleh pengekodan yang dibaiki

Pengekodan menentukan cara teks dibaca; ia tidak mengatakan apa-apa tentang sama ada pilihan itu sah untuk klien di hadapan anda. Profil yang dieksport untuk pelaksanaan lain boleh dihuraikan dengan bersih dan masih ditolak kerana pilihan yang tidak disokong binaan yang berjalan, atau kerana arahan yang hujahnya bermaksud lain dalam klien itu.

Ralat kemudian itu wajar disiasat sendiri: ejaan tepat, sintaks hujah dan versi yang menerimanya. Jangan anggap penghuraian berjaya sebagai profil yang berjaya.

Kekalkan siasatan secara setempat semasa anda melakukannya. Penukar dalam talian awam dan dumped hex yang ditampal ialah tempat yang buruk untuk fail yang mungkin mengandungi kunci peribadi, kerana masalah pengekodan mudah dibaiki dan kunci yang bocor tidak.

Artikel berkaitan