Poruka kaže da OpenVPN ne može učitati ugrađeni certifikat, a naziv datoteke koji nosite u glavi tvrdi suprotno. Ono što je parser primio važnije je od onoga što sadrži datotečni sustav, jer direktiva cert prihvaća dvije posve različite vrste vrijednosti. Jedna je putanja koju otvara; druga je PEM tekst koji je stigao unutar konfiguracije. Dok ne znate koji je oblik dobio klijent koji radi, svaki je popravak nagađanje.

Dva oblika pohrane, jedna direktiva

Direktive cert, key i ca prihvaćaju putanju ili ugrađeni blok. Kada je vrijednost putanja, OpenVPN otvara tu datoteku i čita objekt s diska. Kada konfiguracija sadrži blok omeđen cert oznakama, ista direktiva umjesto toga troši sadržaj između tih oznaka i zasebna datoteka nije uključena.

Oba oblika na kraju daju istu vrstu objekta, zato radna instalacija može prelaziti između njih bez ikakve druge promjene. Profil koji nosi ugrađeni klijentski certifikat i privatni ključ samostalan je, a kopiranje na drugo računalo radi i bez kopiranja direktorija s certifikatima.

Obrnuto nije točno. Bacanje client.crt pokraj profila koji ugrađuje vlastite podatke ne mijenja ništa, jer se ništa u konfiguraciji ne poziva na tu datoteku. To je najčešći razlog zašto datoteka koja očito postoji izgleda zanemarena.

Kako ugrađeni blok postaje objekt

Ugrađeni sadržaj izvlači se iz konfiguracije i predaje PEM parseru kao tekst. Taj parser očekuje uobičajene granice: red BEGIN, base64 sadržaj i odgovarajući red END. Ako je blok odsječen neuspjelim kopiranjem, umotan u HTML od strane stranice za preuzimanje ili otvoren u editoru koji je normalizirao crtice, parser pada na sadržaju koji izgleda prisutno.

<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

Zato je i formulacija greške zavaravajuća. Riječ ugrađeni opisuje gdje je učitavač pogledao, a ne što je tamo našao. Datoteka navedena u konfiguraciji i objekt ugrađen u nju mogu proizvesti istu žalbu kada su osnovni bajtovi neupotrebljivi.

Provjerite koji oblik učitani profil doista koristi, a ne koju je datoteku vaš editor slučajno otvorio:

grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn

Kako se rješava referenca na putanju

Vrijednost putanje otvara se relativno prema radnom direktoriju klijenta, ne prema direktoriju koji sadrži konfiguraciju. Pod systemd tim je radnim direktorijem ono što jedinica postavi, a interaktivno pokretanje iz vaše ljuske nasljeđuje nešto posve drugo. Zato ista konfiguracijska datoteka može raditi kada je testirate ručno, a pasti kao servis.

Relativne putanje nasljeđuju istu dvosmislenost. Kada vidite golu datoteku, pitajte koji je trenutni direktorij procesa u produkciji, umjesto da pretpostavite da se podudara s vašim terminalom.

Za certifikat pohranjen odvojeno, offline parsiranje potvrđuje objekt prije nego što bilo što iznad njega treba ispravljati:

openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check

Te komande dokazuju da su datoteke čitljive i strukturno valjane. Ne dokazuju da partner vjeruje izdavatelju, da je certifikat još unutar roka valjanosti ili da ključ pripada njemu.

Što greška parsera može i ne može reći

Neuspjeh parsiranja lokalizira problem na jedan ulaz i jednu fazu. Ne govori vam koji je od dva oblika pohrane klijent koristio i ne govori je li objekt bio prihvaćen. To su odvojena pitanja s odvojenim dokazima.

Kada parsiranje uspije, sljedeći neuspjeh pripada kasnijoj fazi. Odbijanje povjerenja, nepodudarnost namjene ili nepodudarnost ključa prijavljuje partner ili TLS sloj, a ne učitavač. Ponovno zamjenjivanje iste datoteke neće pomaknuti tu grešku.

Držite osjetljivu polovicu izvan javnih izvještaja dok istražujete. Podijelite nazive direktiva, tekst greške i strukturu bloka, uz uklonjen ključni materijal i svaki identifikacijski sadržaj. Priručnik openvpn(8) dokumentira oba oblika datotečnih direktiva i ponašanje radnog direktorija iza njih.

Povezani članci