OpenVPN birinchi qatorni rad etmoqdami? Fayl katta ehtimol bilan UTF-16
Birinchi qatordagi g'alati belgilar bilan chiqqan xato odatda profil UTF-16 sifatida saqlanganini bildiradi. Birinchi baytlarni o'qing, so'ng faylni to'g'ri o'zgartiring.
Xato .ovpn faylining birinchi qatoriga ishora qiladi va client bo'lishi kerak joyda aralashib ketgan harflarga o'xshash narsani keltiradi. Fayl muharriringizda muammosiz ochiladi, birinchi qator client deb o'qiladi va ko'rsatma butunlay oddiy. Ikkala kuzatuv ham to'g'ri, chunki muharrir baytlarni dekodlaydi, mijoz esa bunday qilmaydi. Siz ko'rayotgan narsa deyarli har doim kodlash muammosi, sintaksis muammosi emas.
Afsona: muharrir sizga faylni ko'rsatadi
Matn muharriri baytlarni o'zi aniqlagan yoki taxmin qilgan kodlash bilan belgilarga aylantiradi. UTF-16 deb taxmin qilganda, fayl ekranda benuqson ko'rinadi, holbuki ostidagi baytlar juft bo'lib, har bir lotin harfidan keyin nol bayt keladi. OpenVPN bu baytlarni belgi sifatida o'qiydi va nomuvofiqlik u tahlil qilishga urinayotgan birinchi ko'rsatmada yuzaga chiqadi.
Demak, ko'rinadigan qator va yetkaziladigan qator ikki xil narsa. Ko'rib turgan g'alati belgilarni o'chirish kodlashni emas, ko'rinishni o'zgartiradi va keyingi tahlil ham xuddi shu sababdan biroz boshqacha xabar bilan muvaffaqiyatsiz bo'ladi. Shuning uchun xatodagi belgini ta'qib qilish hech qachon hech qayerga olib bormaydi. Baytlar manbada xato va har bir keyingi o'quvchi xuddi shu buzilgan ketma-ketlikni taxmin qiladi.
Muvaffaqiyatsizlikning aniq shaklini tanib olishga arziydi, chunki u o'ziga xos tarzda diagnostik. Faylning eng boshidagi belgi, boshqa mashinalarda ishlagan profilda, so'z boyligi emas, bayt tartibi masalasidir.
Birinchi baytlar aslida nima deydi
Belgilar emas, baytlarni o'qing. Ikki kichik buyruq buni bir necha soniyada hal qiladi va ikkalasi ham faylni o'zgartirishi mumkin bo'lgan ilovada ochishni talab qilmaydi:
file client.ovpn
head -c 24 client.ovpn | od -An -tx1
Siz izlayotgan naqsh — har ikkinchi bayti nol bo'lgan matn oldidan keladigan juft boshlang'ich bayt. FF FE UTF-16 little-endian, FE FF big-endian, EF BB BF esa bayt tartibi belgisi bilan UTF-8 ni bildiradi. Belgisiz oddiy UTF-8 fayl to'g'ridan-to'g'ri birinchi harfning bayti bilan boshlanadi.
Harflar orasidagi nol baytlar asosiy ishoradir. UTF-16 little-endian da client so'zi olti emas, o'n ikki bayt egallaydi, chunki har bir ASCII belgisidan keyin nol keladi. Bu tuzilmani muharrir ekrani sizga ko'rsata olmaydi va ikki baytni o'chirish ham uni yo'q qila olmaydi.
Bu yerda muhim noziklik bor: OpenVPN konfiguratsiya o'quvchisi fayl boshidagi UTF-8 bayt tartibi belgisini haqiqatan ham o'tkazib yuboradi, buni 2.6 konfiguratsiya o'quvchisi ko'rsatadi. Bu bag'rikenglik aynan o'sha belgiga tegishli va harflari nollar bilan to'ldirilgan UTF-16 fayli uchun hech narsa qilmaydi. Ikki belgini bir muammo deb hisoblash afsonaning ikkinchi yarmidir.
O'zgartirish o'chirish emas, boshqacha saqlashdir
Biror narsa qilishdan oldin operatorning asl nusxasining tegilmagan nusxasini saqlang va alohida faylda ishlang. Profilda maxfiy kalit yoki hisob ma'lumotlari bo'lishi mumkin, shuning uchun nusxa ham qaytish yo'lingiz, ham ma'lumotnomangizdir.
So'ng haqiqiy kodlash o'zgartirishini bajaring: yo muharrirning aniq kodlash menyusi orqali, yo kirish va chiqish kodlashini ko'rsatadigan konverter bilan:
iconv -f UTF-16 -t UTF-8 client.ovpn > client-utf8.ovpn
file client-utf8.ovpn
Buyruqning chiqish holatiga ishonish o'rniga natijani tekshiring. O'zgartirish har bir ko'rsatmani saqlashi kerak va o'z belgilarining ichida har qanday ichki sertifikat yoki kalit blokini bayt-bayt saqlashga majbur. PEM ma'lumotlarini qayta o'rash, blok ichidagi qator oxirlarini o'zgartirish yoki o'zgartirish paytida profilni qayta formatlash eski muammoni tuzatayotganda yangi muammo yaratadi.
Mijoz yoki xizmatni o'zgartirilgan faylga yo'naltiring va u bildiradigan birinchi xatoga qarang. Agar aralashib ketgan belgi yo'qolgan bo'lsa, kodlash ishi tugagan va keyin muvaffaqiyatsiz bo'ladigan har qanday narsa boshqa savol.
Tuzatilgan kodlash nimani tuzatmaydi
Kodlash matn qanday o'qilishini belgilaydi; u oldingizdagi mijoz uchun parametrlar to'g'ri yoki yo'qligini aytmaydi. Boshqa amalga oshirish uchun eksport qilingan profil toza tahlil qilinishi va baribir ishlab turgan build qo'llab-quvvatlamaydigan parametr yoki argumenti o'sha mijozda boshqa ma'no anglatadigan ko'rsatma sababli rad etilishi mumkin.
O'sha keyingi xatolar o'z tekshiruviga loyiq: aniq imlo, argument sintaksisi va uni qabul qiladigan versiya. Muvaffaqiyatli tahlilni muvaffaqiyatli profil deb hisoblamang.
Shu bilan mashg'ul bo'lganingizda tekshiruvni mahalliy saqlang. Ommaviy onlayn konverterlar va joylashtirilgan hex dump'lar maxfiy kalit bo'lishi mumkin bo'lgan fayl uchun yomon joy, chunki kodlash muammosini tuzatish oson, oqib ketgan kalitni esa emas.