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 sistem, jer direktiva cert prihvata dvije potpuno 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, svaka popravka je nagađanje.

Dva oblika pohrane, jedna direktiva

Direktive cert, key i ca prihvataju putanju ili ugrađeni blok. Kada je vrijednost putanja, OpenVPN otvara tu datoteku i čita objekat s diska. Kada konfiguracija sadrži blok omeđen cert oznakama, ista direktiva umjesto toga koristi sadržaj između tih oznaka i posebna 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 drugu mašinu radi i bez kopiranja direktorija s certifikatima.

Obrnuto nije tačno. Bacanje client.crt pored 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 objekat

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č gledao, a ne šta je tamo našao. Datoteka navedena u konfiguraciji i objekat ugrađen u nju mogu proizvesti istu žalbu kada su osnovni bajtovi neupotrebljivi.

Provjerite koji oblik učitani profil zaista 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 u odnosu na radni direktorij klijenta, ne na direktorij koji sadrži konfiguraciju. Pod systemd tim radnim direktorijem je ono što jedinica postavi, a interaktivno pokretanje iz vaše ljuske nasljeđuje nešto sasvim 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 poklapa s vašim terminalom.

Za certifikat pohranjen odvojeno, offline parsiranje potvrđuje objekat prije nego što bilo šta 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 izdavaocu, da je certifikat još unutar roka važenja ili da ključ pripada njemu.

Šta greška parsera može i ne može da vam kaže

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

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

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

Povezani članci