Чому 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 для встановленої версії.