Dlaczego OpenVPN w Windows mówi ca: ścieżka bez cudzysłowów, a nie zły certyfikat
Ścieżka Program Files bez cudzysłowów dzieli się na kilka argumentów, a parser obwinia opcję. Sprawdź cudzysłowy, wiersz klienta i kodowanie.
OpenVPN nie startuje, a komunikat o błędzie wskazuje wiersz, który wygląda poprawnie: Unrecognized option or missing or extra parameter(s) in office.ovpn:42: ca. Certyfikat się nie zmienił, plik otwiera się w edytorze, a w ścieżce nic nie wygląda źle. Parser nie kwestionuje nazwy opcji; kwestionuje to, ile argumentów przyszło razem z nią. Cztery kontrole rozwiązują prawie każdy taki przypadek, i warto je wykonać w kolejności kosztów.
Dlaczego parser obwinia opcję
Każdy wiersz konfiguracji jest dzielony na spacje i na cudzysłowy, zanim zobaczy go jakakolwiek opcja. Dlatego wartość ze spacją przychodzi jako kilka argumentów, jeśli nie jest objęta cudzysłowami, a opcja, do której należał wiersz, zgłasza niezgodność. W Windows zapewnia to domyślny katalog instalacji, ponieważ C:\Program Files z samej konstrukcji znajduje się w środku ścieżki. W tym błędzie certyfikat nigdy nie jest otwierany, więc sprawdzanie, czy plik istnieje, niczego użytecznego nie dowodzi.
Zgłoszony numer wiersza zwykle się zgadza, a zgłoszona opcja to ta, która zużyła wiersz. Gdy wskazana opcja jest tą, o której wiesz, że nigdy jej nie napisałeś, przeczytaj wiersz powyżej, bo cudzysłów zgubiony we wcześniejszym bloku przesuwa parsowanie. Tak blok certyfikatu zostaje w końcu obwiniony o liczbę argumentów.
ca C:\Program Files\OpenVPN\config\office-ca.crtUjmij w cudzysłowy każdą ścieżkę ze spacją
Jedna para podwójnych cudzysłowów wokół wartości to cała naprawa, a w Windows ukośniki są akceptowane, więc eskejpowanie nigdy nie staje się częścią problemu. Popraw każdą opcję ścieżki w tym samym przebiegu, bo parser zatrzymuje się na pierwszym błędzie, a następny po prostu czeka na kolejne uruchomienie. Zestaw zwykle obejmuje ca, cert, key, tls-auth i 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"Wyszukiwanie po nazwie katalogu znajduje każde wystąpienie szybciej niż czytanie pliku. Uruchom je przed jakąkolwiek edycją, aby lista była kompletna:
Select-String -Path .\office.ovpn -Pattern 'Program Files'Przeniesienie profilu na ścieżkę bez spacji jest poprawną alternatywą, i jest poprawna tylko wtedy, gdy przenosi się razem z nim każda ścieżka. Na wpół przeniesiony profil odtwarza ten sam błąd z inną nazwą pliku, co trudniej zauważyć, bo komunikat wskazuje teraz ścieżkę, którą właśnie utworzyłeś. Wybierz jedno podejście i dokończ je.
Odzyskaj deklarację trybu przed certyfikatami
Druga częsta przyczyna daje inny komunikat z tym samym zmarnowanym popołudniem. Profil klienta musi zadeklarować swój tryb blisko góry, a ta deklaracja łatwo ginie, gdy do nowego pliku wkleja się tylko bloki certyfikatów. Bez niej OpenVPN czyta plik z innym zestawem wartości domyślnych, a szkoda pojawia się znacznie później jako konflikt między opcjami albo nieudane logowanie. Brakujący wiersz jest tani do sprawdzenia i drogi do zapomnienia.
client
dev tun
proto udp
remote vpn.example.net 1194Trzymaj jedną dyrektywę na wiersz, dopóki tam jesteś. Połączone wiersze dają dokładnie błąd liczby argumentów z pierwszej części, a zgłoszony wiersz wygląda rozsądnie, bo połączenie nastąpiło tam, gdzie edytor złamał tekst. Czytaj wiersz surowy, a nie wyświetlany.
Uszkodzenie kodowania wygląda jak nazwa opcji
Plik zapisany jako UTF-16, wraz ze znacznikiem kolejności bajtów, ukrywa swoją pierwszą opcję przed parserem, a zabłąkane bajty mogą przykleić się do nazwy opcji w komunikacie. Zapisz plik jako UTF-8 bez znacznika kolejności bajtów, potem otwórz go ponownie i potwierdź, że pierwszy znak to zwykła litera. Edytory, przekierowanie w PowerShellu i tekst wklejony z okna czatu zmieniają kodowanie bez pytania.
Format-Hex .\office.ovpn | Select-Object -First 1Znacznik kolejności bajtów pojawia się jako wiodące bajty znacznika przed jakimkolwiek tekstem, a ręczne usuwanie tych znaków to przegrany ruch, bo edytor zapisuje je ponownie przy następnym zapisie. Zamiast tego zapisz plik ponownie z jawnym kodowaniem. Końce wierszy są łagodniejsze, ale plik bez nowego wiersza na końcu może po edycji nadal scalić ostatnią dyrektywę z poprzednią.
Którą kontrolę wykonać najpierw i dlaczego
Zacznij od kodowania, bo kosztuje jedno polecenie i unieważnia każde inne odczytanie pliku. Potem cudzysłowy, następnie deklaracja trybu i pozostałe obowiązkowe dyrektywy, a dopiero po nich certyfikaty, klucze i dane logowania. Praca w tej kolejności utrzymuje każdy krok odwracalnym, bo certyfikat wymieniony, aby naprawić problem z cudzysłowami, zostawia działającą instalację z nową usterką oddaloną o dwie edycje od oryginału. Kolejność liczy się bardziej niż poszczególne kontrole.
Zachowaj nietkniętą kopię pliku taką, jaką dostarczył operator. Jeśli późniejsza edycja ją zepsuje, różnica względem tej kopii pokaże, czy przesunął się cudzysłów, nowy wiersz albo bajt znacznika, co jest szybsze niż ponowne czytanie błędu. Odnośnik do opcji każdej dyrektywy jest w podręczniku OpenVPN dla zainstalowanej wersji.