Com resol OpenVPN el certificat i la clau: PEM incrustat o ruta
La mateixa directiva porta o bé una ruta de fitxer o bé un objecte PEM incrustat. Llegiu quin dels dos fa servir el perfil carregat abans de moure cap certificat.
El missatge diu que OpenVPN no pot carregar un certificat incrustat, i el nom de fitxer que teniu al cap diu una altra cosa. El que ha rebut l’analitzador importa més que el que conté el sistema de fitxers, perquè la directiva cert accepta dos tipus de valor completament diferents. Un és una ruta que obre; l’altre és text PEM que ha arribat dins la configuració. Fins que no sapigueu quina forma ha rebut el client en execució, cada correcció és una conjectura.
Dues formes d’emmagatzematge, una directiva
Les directives cert, key i ca accepten cadascuna una ruta o un bloc incrustat. Quan el valor és una ruta, OpenVPN obre aquest fitxer i llegeix l’objecte del disc. Quan la configuració conté un bloc delimitat per etiquetes cert, la mateixa directiva consumeix en el seu lloc el contingut entre aquestes etiquetes, i no hi intervé cap fitxer separat.
Totes dues formes produeixen al final el mateix tipus d’objecte, i per això un desplegament que funciona pot passar d’una a l’altra sense cap altre canvi. Un perfil que porta un certificat de client i una clau privada incrustats és autosuficient, i copiar-lo a una altra màquina funciona sense copiar també un directori de certificats.
El contrari no és cert. Deixar client.crt al costat d’un perfil que incrusta les seves pròpies dades no canvia res, perquè res a la configuració fa referència a aquest fitxer. És la raó més habitual per la qual un fitxer que existeix clarament sembla ignorat.
Com un bloc incrustat es converteix en un objecte
El contingut incrustat s’extreu de la configuració i es lliura a l’analitzador PEM com a text. Aquest analitzador espera els límits habituals: una línia BEGIN, una càrrega base64 i una línia END corresponent. Si el bloc ha estat truncat per una còpia fallida, embolcallat en HTML per una pàgina de descàrrega o obert en un editor que ha normalitzat els guions, l’analitzador falla en un contingut que sembla present.
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
Per això també la redacció de l’error és enganyosa. La paraula incrustat descriu on ha mirat el carregador, no què hi ha trobat. Un fitxer anomenat en una configuració i un objecte incrustat en ella poden produir la mateixa queixa quan els bytes subjacents no són utilitzables.
Comproveu quina forma fa servir realment el perfil carregat, no quin fitxer ha obert casualment l’editor:
grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn
Com es resol una referència de ruta
Un valor de ruta s’obre en relació amb el directori de treball del client, no amb el directori que conté la configuració. Sota systemd aquest directori de treball és el que estableix la unitat, i una execució interactiva des de la vostra shell n’hereta un altre de ben diferent. Per això el mateix fitxer de configuració pot funcionar quan el proveu a mà i fallar com a servei.
Les rutes relatives n’hereten la mateixa ambigüitat. Quan vegeu un nom de fitxer solt, pregunteu quin és el directori actual del procés en producció en lloc de suposar que coincideix amb el vostre terminal.
Per a un certificat emmagatzemat per separat, una anàlisi fora de línia confirma l’objecte abans que depureu res per sobre:
openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check
Aquestes ordres demostren que els fitxers són llegibles i estructuralment vàlids. No demostren que el par confiï en l’emissor, que el certificat segueixi dins la seva finestra de validesa o que la clau li correspongui.
Què us pot dir l’error de l’analitzador i què no
Una fallada d’anàlisi localitza el problema en una entrada i una etapa. No us diu quina de les dues formes d’emmagatzematge ha fet servir el client, ni us diu si l’objecte hauria estat acceptat. Són preguntes separades amb proves separades.
Un cop l’anàlisi té èxit, la fallada següent pertany a una etapa posterior. Un rebuig de confiança, una discrepància de propòsit o una discrepància de clau les notifica el par o la capa TLS, no el carregador. Substituir el mateix fitxer una vegada i una altra no mourà aquest error.
Manteniu la meitat sensible fora dels informes públics mentre investigueu. Compartiu els noms de les directives, el text de l’error i l’estructura del bloc, amb el material de clau i qualsevol càrrega identificativa eliminats. El manual openvpn(8) documenta les dues formes de les directives de fitxer i el comportament del directori de treball que hi ha al darrere.