Kako OpenVPN razreši potrdilo in ključ: vdelani PEM ali pot
Ista direktiva nosi bodisi pot do datoteke bodisi vdelan objekt PEM. Preberite, katero od obeh uporablja naloženi profil, preden premaknete potrdila.
Sporočilo pravi, da OpenVPN ne more naložiti vdelanega potrdila, ime datoteke, ki ga imate v glavi, pa pravi nasprotno. Kar je prejel razčlenjevalnik, je pomembnejše od tega, kar vsebuje datotečni sistem, ker direktiva cert sprejema dve povsem različni vrsti vrednosti. Ena je pot, ki jo odpre; druga je besedilo PEM, ki je prispelo znotraj konfiguracije. Dokler ne veste, kakšno obliko je dobil delujoči odjemalec, je vsak popravek ugibanje.
Dve obliki shranjevanja, ena direktiva
Direktive cert, key in ca sprejmejo pot ali vdelan blok. Ko je vrednost pot, OpenVPN odpre to datoteko in prebere objekt z diska. Ko konfiguracija vsebuje blok, omejen z oznakami cert, ista direktiva namesto tega porabi vsebino med temi oznakami, ločena datoteka pa ni vključena.
Obe obliki na koncu ustvarita isto vrsto objekta, zato lahko delujoča namestitev prehaja med njima brez kakršne koli druge spremembe. Profil, ki nosi vdelano odjemalsko potrdilo in zasebni ključ, je samozadosten, kopiranje na drug stroj pa deluje tudi brez kopiranja imenika s potrdili.
Obratno ne velja. Če client.crt položite poleg profila, ki vdeluje lastne podatke, se nič ne spremeni, ker se nič v konfiguraciji ne sklicuje na to datoteko. To je najpogostejši razlog, da je datoteka, ki očitno obstaja, videti prezrta.
Kako vdelan blok postane objekt
Vdelana vsebina se izlušči iz konfiguracije in preda razčlenjevalniku PEM kot besedilo. Ta razčlenjevalnik pričakuje običajne meje: vrstico BEGIN, podatkovni del base64 in ustrezno vrstico END. Če je bil blok odrezan zaradi neuspešnega kopiranja, ovit v HTML s strani za prenos ali odprt v urejevalniku, ki je normaliziral pomišljaje, razčlenjevalnik odpove na vsebini, ki je videti prisotna.
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
Zato je tudi formulacija napake zavajajoča. Beseda vdelan opisuje, kam je pogledal nalagalnik, ne tega, kaj je tam našel. Datoteka, navedena v konfiguraciji, in objekt, vdelan vanjo, lahko ustvarita isto pritožbo, ko so osnovni bajti neuporabni.
Preverite, katero obliko naloženi profil dejansko uporablja, ne katere datoteke je slučajno odprl vaš urejevalnik:
grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn
Kako se razreši sklic na pot
Vrednost poti se odpre glede na delovni imenik odjemalca, ne glede na imenik, ki vsebuje konfiguracijo. Pod systemd je ta delovni imenik tisto, kar nastavi enota, interaktivni zagon iz vaše lupine pa podeduje nekaj povsem drugega. Zato lahko ista konfiguracijska datoteka deluje pri ročnem preizkusu in odpove kot storitev.
Relativne poti podedujejo isto dvoumnost. Ko vidite golo ime datoteke, vprašajte, kakšen je trenutni imenik procesa v produkciji, namesto da bi domnevali, da se ujema z vašim terminalom.
Za potrdilo, shranjeno ločeno, analiza brez povezave potrdi objekt, preden karkoli razhroščujete nad njim:
openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check
Ti ukazi dokazujejo, da so datoteke berljive in strukturno veljavne. Ne dokazujejo, da partnerska stran zaupa izdajatelju, da je potrdilo še znotraj veljavnosti ali da ključ pripada njemu.
Kaj vam napaka razčlenjevalnika lahko in česa ne more povedati
Neuspeh razčlenitve lokalizira težavo na en vnos in eno stopnjo. Ne pove, katero od obeh oblik shranjevanja je uporabil odjemalec, in ne pove, ali bi bilo potrdilo sprejeto. To so ločena vprašanja z ločenimi dokazi.
Ko razčlenitev uspe, naslednja napaka pripada poznejši stopnji. Zavrnitev zaupanja, neujemanje namena ali neujemanje ključa sporoči partnerska stran ali plast TLS, ne nalagalnik. Ponovno zamenjevanje iste datoteke te napake ne bo premaknilo.
Občutljivo polovico med preiskavo držite zunaj javnih poročil. Delite imena direktiv, besedilo napake in zgradbo bloka, z odstranjenim ključnim gradivom in vsakim identifikacijskim podatkovnim delom. Priročnik openvpn(8) dokumentira obe obliki datotečnih direktiv in vedenje delovnega imenika za njima.