Защо OpenVPN на Windows казва ca: път без кавички, а не лош сертификат
Път до Program Files без кавички се разделя на няколко аргумента и парсерът обвинява опцията. Проверете кавичките, реда на клиента и кодирането.
OpenVPN не стартира, а съобщението за грешка сочи ред, който изглежда напълно наред: Unrecognized option or missing or extra parameter(s) in office.ovpn:42: ca. Сертификатът не се е променил, файлът се отваря в редактор и нищо в пътя не изглежда грешно. Парсерът не възразява срещу името на опцията; той възразява срещу това колко аргумента са пристигнали с нея. Четири проверки решават почти всеки такъв случай и си струва да се направят по реда на разходите.
Защо парсерът обвинява опцията
Всеки ред от конфигурацията се разделя по интервали и по кавички, преди някоя опция да го види. Затова стойност, която съдържа интервал, пристига като няколко аргумента, освен ако не е оградена, а опцията, на която е принадлежал редът, съобщава за несъответствието. Под Windows папката за инсталиране по подразбиране прави това сигурно, защото C:\Program Files стои по средата на пътя по самата си конструкция. Сертификатът никога не се отваря при тази грешка, така че проверката дали файлът съществува не доказва нищо полезно.
Съобщеният номер на ред обикновено е верен, а съобщената опция е тази, която е изразходвала реда. Когато посочената опция е такава, която знаете, че никога не сте писали, прочетете реда над нея, защото изгубена кавичка в по-ранен блок измества разбора. Така блок със сертификат в крайна сметка бива обвинен за броя аргументи.
ca C:\Program Files\OpenVPN\config\office-ca.crtОградете с кавички всеки път с интервал
Една двойка двойни кавички около стойността е цялата поправка, а правите наклонени черти се приемат под Windows, така че екранирането никога не става част от проблема. Поправете всяка опция за път в същия проход, защото парсерът спира на първия провал, а следващият просто чака следващото рестартиране. Наборът обикновено включва ca, cert, key, tls-auth и auth-user-pass.
ca "C:/Program Files/OpenVPN/config/office-ca.crt"
cert "C:/Program Files/OpenVPN/config/office.crt"
key "C:/Program Files/OpenVPN/config/office.key"Търсене по името на папката намира всяко срещане по-бързо от четене на файла. Пуснете го преди каквито и да е промени, за да е пълен списъкът:
Select-String -Path .\office.ovpn -Pattern 'Program Files'Преместването на профила в път без интервали е валидна алтернатива и е валидна само ако всеки път се мести с него. Наполовина преместен профил възпроизвежда същата грешка с друго име на файл и това е по-трудно за забелязване, защото съобщението вече сочи път, който току-що сте създали. Изберете един подход и го довършете.
Възстановете декларацията за режим преди сертификатите
Втората честа причина дава различно съобщение със същия пропилян следобед. Профилът на клиента трябва да декларира режима си близо до началото и тази декларация лесно се губи, когато в нов файл се поставят само блоковете със сертификати. Без нея OpenVPN чете файла с различен набор от настройки по подразбиране и щетата се появява много по-късно като конфликт между опции или неуспешен вход. Липсващият ред е евтин за проверка и скъп за забравяне.
client
dev tun
proto udp
remote vpn.example.net 1194Дръжте по една директива на ред, докато сте там. Слетите редове дават точно грешката за брой аргументи от първия раздел, а съобщеният ред изглежда разумен, защото сливането е станало там, където редакторът е пренесъл текста. Четете суровия ред, а не показания.
Повредата от кодиране изглежда като име на опция
Файл, съхранен като UTF-16 с маркер за ред на байтовете, скрива първата си опция от парсера, а случайни байтове могат да се залепят за името на опцията в съобщението. Запазете файла като UTF-8 без маркер за ред на байтовете, после го отворете отново и потвърдете, че първият знак е обикновена буква. Редакторите, пренасочването в PowerShell и текстът, поставен от прозорец за чат, променят кодирането без да питат.
Format-Hex .\office.ovpn | Select-Object -First 1Маркерът за ред на байтовете се показва като водещи байтове преди всеки текст и изтриването на тези знаци на ръка е губещ ход, защото редакторът ги записва обратно при следващото запазване. Вместо това запазете файла отново с явно кодиране. Краищата на редовете са по-снизходителни, но файл без нов ред в края все още може да слее последната директива с предходната след редакция.
Коя проверка първо и защо
Започнете с кодирането, защото струва една команда и обезсилва всяко друго четене на файла. После кавичките, сетне декларацията за режим и другите задължителни директиви и само след тях сертификатите, ключовете и данните за вход. Работата в този ред запазва всяка стъпка обратима, защото заменен сертификат, за да се поправи проблем с кавички, оставя работеща инсталация с нов провал на две редакции от оригинала. Редът е по-важен от отделните проверки.
Пазете недокоснато копие на файла такъв, какъвто операторът го е доставил. Ако по-късна редакция го счупи, разлика спрямо това копие показва дали се е преместила кавичка, нов ред или байт от маркера, което е по-бързо от препрочитане на грешката. Справката за опциите на всяка директива е в ръководството на OpenVPN за инсталираната версия.