OpenVPN tls-ciphersuites наспроти tls-version-min: што наметнува секој
Списокот на TLS 1.3 множества не ја ограничува верзијата на протоколот, а show-tls прикажува само локална поддршка. Проверете ја политиката, множествата и договорените резултати одделно.
Три различни факти се спојуваат во една линија во повеќето дискусии за OpenVPN и TLS: што може вашата клиентска изградба, што дозволува профилот и што всушност договорила сесијата. Кратката листа на TLS 1.3 множества одговара само половично на средното прашање и не кажува ништо за долната граница на верзијата на протоколот. Поминете ги проверките подолу по ред и застанете на првата што не издржува, бидејќи секоја следна проверка претпоставува дека претходните се решени.
Проверете ја изградбата пред да читате било која листа
Конфигурациската директива не може да додаде поддршка за протокол на бинарна датотека што ја нема. Започнете со банерот за верзијата, кој ја именува компајлираната криптографска библиотека:
openvpn --version
Изградба 2.6 поврзана со OpenSSL прифаќа и tls-cipher и tls-ciphersuites. Изградба со mbed TLS воопшто нема избор на TLS 1.3 множества, а прирачникот 2.6 го означува tls-ciphersuites како OpenSSL опција. Ако серверот се преизгради со друг backend, истиот профил може да го промени однесувањето без да се смени ниту една линија од конфигурацијата.
Додека сте тука, извршете openvpn --show-tls и зачувајте го излезот. Тоа е инвентарот со кој подоцна ќе споредувате, и евтино е да се фати пред некој да почне да уредува профили.
Запишете ги банерот и листата во тикетот за промена, а не во прозорец за разговор. Кога двајца се расправаат дали клиент за шест недели ќе може да понуди множество, фатениот излез тоа го решава во една линија.
Држете ги границите на верзијата одделно од листите со шифри
Во прирачникот 2.6 ова се три контроли, а не една:
tls-cipherја поставува политиката за шифри за TLS 1.2 и постари верзии и се предава на листата со шифри на OpenSSL;tls-ciphersuitesизбира TLS 1.3 множества;tls-version-minиtls-version-maxги ограничуваат верзиите на протоколот што врската смее да ги користи.
Значи внимателно поткастрената листа на TLS 1.3 множества не докажува ништо за тоа дека постара верзија уште е дозволена. Ако барањето е «само TLS 1.3», го носи долната граница на верзијата, а листата на множества само ги стеснува изборите во таа граница:
tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
Овој пар врши две работи. Бришењето на едната линија ја остава другата да наметнува помалку отколку што мислите, и токму тоа е дефектот што целата оваа проверка постои за да го фати.
Каналот за податоци е четврта контрола. data-ciphers преговара за симетричната шифра внатре во тунелот, а неговиот резултат не кажува ништо за TLS верзијата на контролниот канал. Гледањето на AES-256-GCM во резимето на сесијата не е доказ за TLS 1.3 во ниту една насока.
Читајте го show-tls како локален инвентар
--show-tls ги наведува множествата што ги поддржува криптографската библиотека со која е поврзана оваа бинарна датотека, по редослед на предност. Тоа не е извештај од портата. Прирачникот експлицитно вели дека листата доаѓа од локалната библиотека, што значи дека преносен компјутер со OpenSSL 3.x и рутер со постара изградба ќе испечатат различни листи додека зборуваат со истиот сервер.
| Evidence | What it actually describes |
|---|---|
--show-tls output | Capabilities of this client build and its library |
| Profile directives | What this attempt is allowed to offer |
| Session log line | What this one negotiation selected |
Да претпоставиме дека клиентот поддржува множества A, B и C и една сесија го избира B. Тоа не утврдува ништо за тоа дали серверот дозволува A или C, ниту пак дали B е неговиот единствен дозволен избор. Држете ги трите реда одделно, и повеќето збунувачки TLS теми ќе се решат сами.
Инвентарот сепак вреди да се чува. Кога сесијата ќе не успее, споредбата на листата на библиотеката со листата на профилот покажува дали клиентот воопшто имал шанса да го понуди тоа што го сакал серверот. Таа покажува и дали промена на backend тивко отстранила TLS_CHACHA20_POLY1305_SHA256 од фондот на кој се потпираат постарите клиенти — видот регресија што се појавува како неколку корисници што не можат да се поврзат, додека сите други не забележуваат ништо.
Прашајте ја портата нешто на што може да одговори
Ако ја администрирате услугата, проверете ја ефективната конфигурација на инстанцата што работи, а не датотека на дискот. OpenVPN можеби бил стартуван со друга --config патека, може да влече вклучувања и можеби не е рестартиран од измената. Политиката на демонот што работи е она што клиентите го среќаваат.
Ако не ја администрирате, побарајте од операторот поддржани барања за клиентот или ограничен тест за прифаќање. Одбиен обид не е автоматски одбиено множество: долна граница на верзијата, проверки на идентитетот на сертификатот како remote-cert-tls, или несовпаѓање помеѓу tls-auth и tls-crypt може да ја завршат размената пред изборот на множество воопшто да е важен. Прочитајте ја грешката на серверот пред да ја смените листата на клиентот, бидејќи «handshake failed» покрива четири различни причини и само една од нив е несовпаѓање на шифрата.
Насочувањето на openssl s_client кон VPN портата исто така не го репродуцира прашањето. Контролниот канал работи во сопственото рамкирање на OpenVPN, па суровата TLS сонда тестира друг протокол на порта што очекува нешто друго. Секој заклучок извлечен од неа се однесува на сондата, а не на тунелот.
Запишете два резултати и држете ги одделно
Свежа дозволена сесија создава ред на контролен канал што ја именува верзијата на протоколот и избраната шифра, и одделен ред на канал за податоци што ја именува шифрата на тунелот. Фатете ги двете со верзијата на клиентот и името на профилот, и забележете која инстанца на серверот одговорила:
openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt
Потоа прочитајте ги двата реда од таа датотека, а не од меморијата. Парот е доказот; самото име на множество е преференција, а границата на верзијата е одделна изјава за тоа што серверот го одбива.
Извршете ги проверките по овој редослед. Потврдете ја изградбата и backend-от со --version. Фатете го --show-tls пред да смените нешто. Наведете ја потребната долна граница на верзијата одделно од листата на множества. Потврдете ја ефективната политика на инстанцата што работи со нејзиниот сопственик. Набљудувајте една дозволена сесија и, ако планот дозволува, еден одбиен обид со постара верзија. Запишете ги резултатите на контролниот и на каналот за податоци како одделни наоди.
Ако потребниот клиент не може да исполни нов минимум, донесете ја таа одлука за миграција или исклучок експлицитно, наместо тивко да намалите неповрзано правило за прифаќање за да изгледа дека распоредувањето е завршено.