Galat menunjuk baris pertama berkas .ovpn dan mengutip sesuatu yang tampak seperti huruf teracak di tempat yang seharusnya berisi client. Berkas terbuka normal di editor Anda, baris pertama terbaca client, dan direktifnya sepenuhnya biasa. Kedua pengamatan itu benar, karena editor mendekode byte sedangkan klien tidak. Yang Anda lihat hampir selalu masalah pengodean, bukan masalah sintaksis.

Mitos: editor menunjukkan berkasnya kepada Anda

Editor teks mendekode byte menjadi karakter dengan pengodean yang dideteksi atau ditebaknya. Saat menebak UTF-16, berkas tampak sempurna di layar sementara byte di bawahnya berupa pasangan, dengan satu byte nol setelah setiap huruf Latin. OpenVPN membaca byte itu sebagai karakter, dan ketidakcocokan muncul pada direktif pertama yang coba diuraikannya.

Jadi baris yang terlihat dan baris yang dikirim adalah dua hal berbeda. Menghapus karakter aneh yang Anda lihat adalah perubahan pada tampilan, bukan pada pengodean, dan penguraian berikutnya gagal karena alasan yang sama dengan pesan yang sedikit berbeda. Itulah sebabnya mengejar token dalam galat tidak pernah membawa ke mana pun. Byte-nya salah di sumbernya, dan setiap pembaca di hilir menebak urutan rusak yang sama.

Bentuk kegagalan yang khas ini layak dikenali, karena bersifat diagnostik dengan cara tertentu. Token di awal sekali berkas, pada profil yang biasanya berjalan di mesin lain, adalah pertanyaan urutan byte, bukan pertanyaan kosakata.

Apa yang sebenarnya dikatakan byte pertama

Bacalah byte-nya, bukan karakternya. Dua perintah kecil menyelesaikannya dalam hitungan detik, dan keduanya tidak menuntut membuka berkas di aplikasi yang mungkin mengubahnya:

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

Pola yang Anda cari adalah sepasang byte pembuka yang diikuti teks dengan setiap byte kedua bernilai nol. FF FE menandai UTF-16 little-endian, FE FF menandai big-endian, dan EF BB BF menandai UTF-8 dengan tanda urutan byte. Berkas UTF-8 biasa tanpa tanda dimulai langsung dengan byte huruf pertama.

Byte nol di antara huruf adalah petunjuknya. Dalam UTF-16 little-endian, kata client memakan dua belas byte alih-alih enam, karena setiap karakter ASCII diikuti nol. Struktur itu bukan sesuatu yang bisa ditunjukkan layar editor kepada Anda, dan bukan sesuatu yang bisa dihapus oleh penghapusan dua byte.

Ada nuansa penting di sini: pembaca konfigurasi OpenVPN memang melewati tanda urutan byte UTF-8 di awal berkas, seperti yang ditunjukkan pembaca konfigurasi 2.6. Toleransi itu khusus untuk tanda tersebut, dan tidak melakukan apa pun untuk berkas UTF-16 yang hurufnya dilapisi nol. Memperlakukan kedua tanda sebagai masalah yang sama adalah separuh kedua dari mitos.

Konversi adalah simpan sebagai, bukan hapus

Simpan salinan utuh dari asli milik operator sebelum melakukan apa pun, dan bekerjalah pada berkas terpisah. Profil bisa berisi kunci privat atau materi akun, jadi salinan itu adalah jalan mundur sekaligus rujukan Anda.

Lalu lakukan konversi pengodean yang sungguh-sungguh, entah lewat menu pengodean eksplisit di editor atau dengan konverter yang menyatakan pengodean masukan dan keluarannya:

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

Verifikasi hasilnya alih-alih memercayai status keluar perintah. Konversi harus mempertahankan setiap direktif, dan wajib mempertahankan setiap blok sertifikat atau kunci tersisip byte demi byte di dalam penandanya. Membungkus ulang data PEM, mengubah akhir baris di dalam blok, atau memformat ulang profil selama konversi menciptakan masalah baru sambil memperbaiki yang lama.

Arahkan klien atau layanan ke berkas hasil konversi dan lihat galat pertama yang dilaporkannya. Jika token teracak sudah hilang, pekerjaan pengodean selesai dan apa pun yang gagal setelahnya adalah pertanyaan lain.

Apa yang tidak diperbaiki oleh pengodean yang sudah diperbaiki

Pengodean menentukan bagaimana teks dibaca; ia tidak mengatakan apa pun tentang apakah opsi-opsi valid bagi klien di depan Anda. Profil yang diekspor untuk implementasi lain bisa terurai dengan bersih dan tetap ditolak karena opsi yang tidak didukung build yang berjalan, atau karena direktif yang argumennya bermakna lain di klien tersebut.

Galat belakangan itu layak diselidiki sendiri: ejaan persisnya, sintaksis argumennya, dan versi yang menerimanya. Jangan menganggap penguraian yang berhasil sebagai profil yang berhasil.

Jagalah penyelidikan tetap lokal selama Anda mengerjakannya. Konverter daring publik dan hex dump yang ditempel adalah tempat buruk bagi berkas yang mungkin berisi kunci privat, karena masalah pengodeannya mudah diperbaiki sedangkan kunci yang bocor tidak.

Artikel terkait