tls-auth key-direction: 0 i 1 han de diferir, no coincidir
Amb tls-auth els dos extrems necessiten direccions oposades, 0 i 1, o tots dos han d'ometre el paràmetre. El mateix número falla, i tls-crypt no l'usa mai.
Un costat del túnel signa el canal de control amb una ranura de clau que l'altre costat no comprova mai, i la connexió mor amb un error d'autenticació abans que s'intercanviï cap certificat. Així és com es veu un desajust de direcció a tls-auth, i és determinista: els mateixos dos fitxers fallen a cada intent, des de qualsevol xarxa. Res al registre no anomena l'opció que busqueu, i per això la gent refà claus i reemeten certificats que mai no estaven trencats. La solució és fer els dos extrems complementaris, o deixar-los tots dos bidireccionals, en lloc d'afeblir la verificació.
La fallada arriba abans dels certificats
Amb tls-auth, tots dos parells tenen la mateixa clau compartida i cadascun usa una de les dues ranures derivades: una ranura signa els paquets de control sortints, l'altra verifica els entrants. La direcció 0 i la direcció 1 assignen aquests papers en ordre oposat, així que la parella ha de ser complementària perquè les comprovacions HMAC coincideixin. Quan l'assignació s'inverteix en un costat, el receptor busca una signatura a la ranura equivocada i rebutja el paquet. La sessió acaba aquí, i per això l'error afecta l'autenticació de paquets i no res que produís el magatzem de certificats.
El determinisme importa per al diagnòstic, perquè un problema de temps o de camí deixa una empremta diferent: talls intermitents, un sentit que falla o una sessió que mor només en una xarxa concreta. Un desajust de direcció falla a la primera encaixada de mans cada vegada, i falla igual en una altra màquina amb els mateixos dos fitxers. Llegiu el registre a --verb 4 i trobeu el primer paquet rebutjat en lloc de l'última línia. Si aquest rebuig passa abans de qualsevol intercanvi de certificats, la clau compartida i la seva direcció són les dues coses que val la pena comprovar.
| What you see | What it rules out | Next check |
|---|---|---|
| Authentication error before any certificate is sent | The data channel is irrelevant; the control channel never authenticated | Compare tls-auth and its direction on both ends |
| Certificate or handshake failure after the control channel authenticates | The shared key and its direction already agree | Check the CA, the certificate dates and the hostname |
| Session completes but throughput or cipher warnings appear | Direction was never the problem | Compare the data-channel cipher settings |
| Startup stops on an options error | The number itself is not the issue | Re-read the inline versus external directive syntax |
On viu el número
El manual d'OpenVPN 2.6 documenta dos llocs per a la direcció: el segon argument de tls-auth quan la clau és en un fitxer propi, i una línia key-direction independent quan la clau és incrustada al perfil. Tots dos fixen el mateix valor, així que un perfil ha d'usar una forma o l'altra, mai les dues. Ometre-ho també és una opció, i posa els dos parells en un arranjament bidireccional que funciona quan cap costat no anomena una direcció. Dos parells amb el mateix número no són en aquest arranjament: cadascun espera signar en una ranura i verificar a l'altra, i tots dos ho fan en el mateix sentit.
# server.conf, external key tls-auth ta.key 0 # client.ovpn, external key tls-auth ta.key 1 # client.ovpn, inline key key-direction 1
La forma incrustada és una directiva en una línia pròpia, no un atribut a l'etiqueta d'obertura del bloc de clau, i afegir-hi un argument és un error, no un canvi de direcció. La col·locació també importa: la directiva queda fora del bloc a què pertany, així que un valor escrit dins del bloc es llegeix com a material de clau. Copieu l'arranjament que volia el distribuïdor del perfil en lloc d'inventar una parella, perquè un perfil que funciona contra un servidor potser ja està mirallat a l'altre costat.
Què deixa intacte l'opció
No xifra el trànsit d'aplicacions. tls-auth posa un HMAC al voltant dels paquets del canal de control, mentre que el canal de dades està protegit per claus de sessió negociades durant l'encaixada de mans, així que una pregunta de rendiment o de xifratge no té res a veure amb el número de direcció. El paràmetre tampoc afegeix una segona capa de xifratge, i aquesta és la suposició que envia la gent a buscar una clau més llarga.
No s'aplica a tls-crypt, un altre mecanisme de canal de control amb opcions i gestió de claus pròpies, i no diu res sobre la identitat del certificat de cap parell. Per tant, una coincidència de direcció que funciona només demostra que els dos extrems acorden com autenticar el canal de control, no que la cadena de confiança s'hagi validat.
Alineeu la parella i torneu a connectar
Compareu les dues configuracions abans de canviar-ne cap, perquè editar el costat que ja era correcte duplica la feina. El grep de sota mostra quin mecanisme tria cada fitxer; l'execució detallada mostra si el canal de control s'ha autenticat. Guardeu les dues sortides, perquè el proper canvi es pugui comparar amb un estat conegut.
grep -n -E 'tls-auth|tls-crypt|key-direction' server.conf client.ovpn openvpn --config client.ovpn --verb 4 2>&1 | grep -i -E 'hmac|tls error|control channel'
Reinicieu tots dos parells després de qualsevol canvi, perquè aquests paràmetres es llegeixen una vegada a l'arrencada i recarregar un costat deixa la parella inconsistent durant tota la vida de la sessió antiga. Si el desplegament funciona ara sense direcció configurada, afegir el paràmetre en un parell reprodueix la fallada amb què vau començar; o deixeu-los tots dos o configureu-los tots dos. Canvieu un extrem alhora i guardeu el fitxer anterior, perquè una regressió sigui una reversió de dos minuts i no una reconstrucció.
Anoteu el mecanisme, el fitxer de clau i la direcció de cada extrem a les notes de desplegament, perquè si no la propera persona llegirà dos fitxers semblants i suposarà que els números s'han de correspondre. La direcció és un detall de coordinació, no una millora de seguretat: separa les dues direccions del canal de control i no fa res més.