Mesajul spune că OpenVPN nu poate încărca un certificat încorporat, iar numele de fișier din mintea dumneavoastră spune altceva. Ce a primit parserul contează mai mult decât ce conține sistemul de fișiere, pentru că directiva cert acceptă două tipuri de valoare complet diferite. Unul este o cale pe care o deschide; celălalt este text PEM care a ajuns în interiorul configurației. Până nu știți ce formă a primit clientul care rulează, fiecare corectare este o presupunere.

Două forme de stocare, o singură directivă

Directivele cert, key și ca acceptă fiecare o cale sau un bloc încorporat. Când valoarea este o cale, OpenVPN deschide acel fișier și citește obiectul de pe disc. Când configurația conține un bloc delimitat de etichete cert, aceeași directivă consumă în schimb conținutul dintre acele etichete, iar niciun fișier separat nu este implicat.

Ambele forme produc în final același tip de obiect, de aceea o implementare funcțională poate trece de la una la cealaltă fără nicio altă modificare. Un profil care poartă un certificat de client și o cheie privată încorporate este autosuficient, iar copierea lui pe o altă mașină funcționează fără a copia și un director de certificate.

Invers nu este adevărat. A pune client.crt lângă un profil care își încorporează propriile date nu schimbă nimic, pentru că nimic din configurație nu se referă la acel fișier. Acesta este cel mai frecvent motiv pentru care un fișier care există evident pare ignorat.

Cum un bloc încorporat devine un obiect

Conținutul încorporat este extras din configurație și predat parserului PEM ca text. Acel parser așteaptă limitele obișnuite: o linie BEGIN, o încărcătură base64 și o linie END corespunzătoare. Dacă blocul a fost trunchiat de o copiere eșuată, înfășurat în HTML de o pagină de descărcare sau deschis într-un editor care a normalizat cratimele, parserul eșuează pe un conținut care pare prezent.

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

De aceea și formularea erorii este înșelătoare. Cuvântul încorporat descrie unde s-a uitat încărcătorul, nu ce a găsit acolo. Un fișier numit într-o configurație și un obiect încorporat în ea pot produce aceeași plângere atunci când octeții de bază sunt inutilizabili.

Verificați ce formă folosește de fapt profilul încărcat, nu ce fișier a deschis din întâmplare editorul dumneavoastră:

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

Cum se rezolvă o referință de cale

O valoare de cale este deschisă relativ la directorul de lucru al clientului, nu la directorul care conține configurația. Sub systemd acel director de lucru este ceea ce stabilește unitatea, iar o rulare interactivă din shell-ul dumneavoastră moștenește cu totul altceva. De aceea același fișier de configurație poate funcționa când îl testați manual și poate eșua ca serviciu.

Căile relative moștenesc aceeași ambiguitate. Când vedeți un nume de fișier gol, întrebați care este directorul curent al procesului în producție în loc să presupuneți că se potrivește cu terminalul dumneavoastră.

Pentru un certificat stocat separat, o analiză offline confirmă obiectul înainte de a depana ceva deasupra lui:

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

Acele comenzi dovedesc că fișierele sunt lizibile și valide structural. Nu dovedesc că partenerul se încrede în emitent, că certificatul este încă în fereastra de valabilitate sau că cheia îi aparține.

Ce poate și ce nu poate să vă spună eroarea parserului

O eșuare de analiză localizează problema într-o singură intrare și o singură etapă. Nu vă spune care dintre cele două forme de stocare a folosit clientul și nu vă spune dacă obiectul ar fi fost acceptat. Acestea sunt întrebări separate cu dovezi separate.

Odată ce analiza reușește, următoarea eșuare aparține unei etape ulterioare. O respingere a încrederii, o nepotrivire de scop sau o nepotrivire de cheie este raportată de partener sau de stratul TLS, nu de încărcător. Înlocuirea repetată a aceluiași fișier nu va muta acea eroare.

Țineți jumătatea sensibilă în afara rapoartelor publice în timp ce investigați. Împărtășiți numele directivelor, textul erorii și structura blocului, cu materialul cheii și orice încărcătură de identificare eliminate. Manualul openvpn(8) documentează ambele forme ale directivelor de fișier și comportamentul directorului de lucru din spatele lor.

Articole similare