tls-auth key-direction: 0 мен 1 өзгеше болуы керек, сәйкес емес
tls-auth кезінде екі жаққа қарама-қарсы бағыттар керек, 0 және 1, немесе екеуі де параметрді тастауы керек. Бірдей сан сәтсіздікке ұшырайды, ал tls-crypt оны ешқашан қолданбайды.
Туннельдің бір жағы басқа жақ ешқашан тексермейтін кілт слотымен басқару арнасына қол қояды, және бір сертификат та алмастырылмай тұрып байланыс аутентификация қатесімен өледі. tls-auth бағытының сәйкессіздігі осылай көрінеді және ол детерминді: сол екі файл әр әрекетте, кез келген желіден сәтсіздікке ұшырайды. Журналда іздеп жүрген параметріңіздің аты жоқ, сондықтан адамдар ешқашан бұзылмаған кілттерді қайта жасайды және сертификаттарды қайта шығарады. Шешім — екі жақты толықтырушы ету немесе екеуін де екібағытты қалдыру, тексеруді әлсірету емес.
Сәтсіздік сертификаттарға дейін болады
tls-auth кезінде екі тарап та бір ортақ кілтті ұстайды және әрқайсысы одан туындаған екі слоттың біреуін қолданады: бір слот шығыс басқару пакеттеріне қол қояды, екіншісі кіріс пакеттерін тексереді. 0 бағыты мен 1 бағыты бұл рөлдерді кері тәртіппен тағайындайды, сондықтан HMAC тексерулері сәйкесуі үшін жұп толықтырушы болуы керек. Бір жақта тағайындау кері бұрылса, қабылдаушы дұрыс емес слоттан қолтаңба іздейді және пакетті қабылдамайды. Сессия сонда аяқталады, сондықтан қате пакеттерді аутентификациялауға қатысты, сертификат қоймасы шығаратын нәрсеге емес.
Детерминділік диагностика үшін маңызды, өйткені уақыт немесе жол мәселесі басқа із қалдырады: үзілісті үзілістер, бір бағыттың сәтсіздігі немесе тек белгілі бір желіде өлетін сессия. Бағыт сәйкессіздігі әр жолы бірінші қол алысуда сәтсіздікке ұшырайды және сол екі файлды ұстаған басқа машинада дәл солай сәтсіздікке ұшырайды. Журналды --verb 4 кезінде оқыңыз және соңғы жолдың орнына бірінші қабылданбаған пакетті табыңыз. Егер бұл қабылдамау кез келген сертификат алмасуынан бұрын болса, ортақ кілт пен оның бағыты тексеруге тұрарлық екі нәрсе.
| 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 |
Сан қайда тұрады
Нұсқаулық OpenVPN 2.6 бағыт үшін екі орынды құжаттайды: кілт жеке файлда болғанда tls-auth-тың екінші аргументі және кілт профильге енгізілгенде жеке key-direction жолы. Екеуі де бірдей мәнді орнатады, сондықтан профиль бір пішінді немесе екіншісін қолдануы керек, ешқашан екеуін де емес. Өткізіп жіберу де таңдау, және ол екі тарапты ешбір жақ бағытты атамағанда жұмыс істейтін екібағытты орналасуға қояды. Бірдей саны бар екі тарап бұл орналасуда емес: әрқайсысы бір слотта қол қоюды және екіншісінде тексеруді күтеді, және екеуі де мұны бірдей жасайды.
# 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
Енгізілген пішін — жеке жолдағы директива, кілт блогының ашылу тегіне атрибут емес, және сол тегке аргумент қосу қате, бағытты өзгерту емес. Орналасу да маңызды: директива өзі тиесілі блоктың сыртында тұрады, сондықтан блоктың ішінде жазылған мән кілт материалы ретінде оқылады. Профиль таратқышы көздеген орналасуды көшіріңіз, жұп ойлап таппаңыз, өйткені бір серверге қарсы жұмыс істейтін профиль екінші жақта әлдеқашан бейнеленген болуы мүмкін.
Параметр нені тиіспейді
Ол қолданба трафигін шифрламайды. tls-auth басқару арнасының пакеттерінің айналасына HMAC қояды, ал деректер арнасы қол алысу кезінде келісілген сессиялық кілттермен қорғалады, сондықтан өткізу қабілеті немесе шифр туралы сұрақтың бағыт санына қатысы жоқ. Параметр екінші шифрлау қабатын да қоспайды, және адамдарды ұзағырақ кілт іздеуге жіберетін дәл осы болжам.
Ол tls-crypt-қа қолданылмайды, өз параметрлері мен кілт өңдеуі бар басқа басқару арнасы механизмі, және кез келген тараптың сертификат сәйкестігі туралы ештеңе айтпайды. Сондықтан жұмыс істейтін бағыт сәйкестігі тек екі жақтың басқару арнасын қалай аутентификациялауды келіскенін дәлелдейді, сенім тізбегінің расталғанын емес.
Жұпты теңестіріңіз, содан кейін қайта қосылыңыз
Кез келгенін өзгерту алдында екі конфигурацияны салыстырыңыз, өйткені әлдеқашан дұрыс жақты өңдеу жұмысты екі есе арттырады. Төмендегі grep әр файлдың қай механизмді таңдайтынын көрсетеді; толық жүгірту басқару арнасының жалпы аутентификацияланғанын көрсетеді. Екі шығысты да сақтаңыз, келесі өзгеріс белгілі күймен салыстырылсын.
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'
Кез келген өзгерістен кейін екі тарапты да қайта іске қосыңыз, өйткені бұл параметрлер іске қосылу кезінде бір рет оқылады және бір жақты қайта жүктеу жұпты ескі сессияның бүкіл өмірі бойы үйлесімсіз қалдырады. Егер орналастыру қазір бағыт конфигурацияланбай жұмыс істеп тұрса, параметрді бір тарапқа қосу сіз бастаған сәтсіздікті қайта жаңғыртады; не екеуін де қалдырыңыз, не екеуін де конфигурациялаңыз. Бір уақытта бір шетті өзгертіңіз және алдыңғы файлды сақтаңыз, регрессия қайта құру емес, екі минуттық қайтару болсын.
Әр шет үшін механизмді, кілт файлын және бағытты орналастыру жазбаларына жазыңыз, әйтпесе келесі адам екі ұқсас файлды оқып, сандар бір-біріне сәйкес болуы керек деп ойлайды. Бағыт — үйлестіру бөлшегі, қауіпсіздікті жақсарту емес: ол басқару арнасының екі бағытын бөледі және басқа ештеңе істемейді.