OpenVPN tls-ciphersuites proti tls-version-min: kaj vsak uveljavlja
Seznam paketov TLS 1.3 ne omejuje različice protokola, show-tls pa prikazuje le krajevno podporo. Politiko, pakete in dogovorjene rezultate preverite ločeno.
Tri različna dejstva se v večini razprav o OpenVPN in TLS stisnejo v eno vrstico: kaj zmore vaša odjemalska gradnja, kaj dovoljuje profil in kaj se je seja dejansko dogovorila. Kratek seznam paketov TLS 1.3 odgovori le na polovico srednjega vprašanja in ne pove ničesar o spodnji meji različice protokola. Pojdite skozi spodnje preverbe po vrsti in se ustavite pri prvi, ki ne zdrži, ker vsaka poznejša predpostavlja, da so prejšnje rešene.
Preverite gradnjo, preden preberete kateri koli seznam
Konfiguracijska direktiva ne more binarni datoteki dodati podpore za protokol, ki je nima. Začnite z verzijskim bannerjem, ki navaja prevedeno kriptografsko knjižnico:
openvpn --version
Gradnja 2.6, povezana z OpenSSL, sprejema tako tls-cipher kot tls-ciphersuites. Gradnja z mbed TLS sploh nima izbire paketov TLS 1.3, in priročnik 2.6 označuje tls-ciphersuites kot možnost OpenSSL. Če je strežnik ponovno zgrajen z drugim backendom, lahko isti profil spremeni vedenje, ne da bi se spremenila ena sama vrstica konfiguracije.
Dokler ste tukaj, zaženite openvpn --show-tls in shranite izhod. To je popis, s katerim boste pozneje primerjali, in poceni ga je zajeti, preden kdo začne urejati profile.
Banner in seznam zapišite v zahtevek za spremembo, ne v klepetalno okno. Ko se dva človeka prepirata, ali bo odjemalec čez šest tednov lahko ponudil paket, zajeti izhod to razreši v eni vrstici.
Meje različice držite ločeno od seznamov šifer
V priročniku 2.6 so to trije kontrolniki, ne eden:
tls-cipherdoloči politiko šifer za TLS 1.2 in starejše ter se posreduje seznamu šifer OpenSSL;tls-ciphersuitesizbere pakete TLS 1.3;tls-version-minintls-version-maxomejita različice protokola, ki jih povezava sme uporabljati.
Skrbno obrezan seznam paketov TLS 1.3 torej ne dokazuje ničesar o tem, da je starejša različica še vedno dovoljena. Če je zahteva »samo TLS 1.3«, jo nosi spodnja meja različice, seznam paketov pa le zoži izbire znotraj te meje:
tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
Ta par opravi dve nalogi. Če izbrišete eno od vrstic, druga uveljavlja manj, kot mislite, in prav to je napaka, zaradi katere ta preverba sploh obstaja.
Podatkovni kanal je četrti kontrolnik. data-ciphers se pogaja o simetrični šifri znotraj tunela, njegov rezultat pa ne pove ničesar o različici TLS krmilnega kanala. Videti AES-256-GCM v povzetku seje ni dokaz o TLS 1.3 v nobeno smer.
Berite show-tls kot krajevni popis
--show-tls našteje pakete, ki jih podpira kriptografska knjižnica, s katero je povezana ta binarna datoteka, po vrstnem redu prednosti. To ni poročilo iz prehoda. Priročnik izrecno pravi, da seznam prihaja iz krajevne knjižnice, kar pomeni, da bosta prenosnik z OpenSSL 3.x in usmerjevalnik s starejšo gradnjo natisnila različna seznama, medtem ko govorita z istim strežnikom.
| 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 |
Recimo, da odjemalec podpira pakete A, B in C ter da ena seja izbere B. To ne ugotavlja ničesar o tem, ali strežnik dovoljuje A ali C, niti o tem, ali je B njegova edina dovoljena izbira. Tri vrstice držite ločeno, in večina zmedenih razprav o TLS se bo razrešila sama.
Popis je vseeno vredno shraniti. Ko seja ne uspe, primerjava seznama knjižnice s seznamom profila pokaže, ali je imel odjemalec sploh možnost ponuditi to, kar je strežnik hotel. Pokaže tudi, ali je sprememba backenda tiho odstranila TLS_CHACHA20_POLY1305_SHA256 iz nabora, na katerega se zanašajo starejši odjemalci — vrsta regresije, ki se pokaže kot peščica uporabnikov, ki se ne morejo povezati, medtem ko vsi ostali ničesar ne opazijo.
Vprašajte prehod nekaj, na kar zna odgovoriti
Če storitev upravljate, pregledajte dejansko konfiguracijo delujoče instance, ne datoteke na disku. OpenVPN je bil morda zagnan z drugo potjo --config, morda vleče vključitve in morda ni bil znova zagnan od urejanja. Odjemalci se srečujejo s politiko delujočega demona.
Če je ne upravljate, prosite operaterja za podprte zahteve odjemalcev ali omejen sprejemni test. Zavrnjen poskus ni samodejno zavrnjen paket: spodnja meja različice, preverbe identitete potrdila, kot je remote-cert-tls, ali neujemanje med tls-auth in tls-crypt lahko končajo izmenjavo, preden izbira paketa sploh postane pomembna. Preberite napako strežnika, preden spremenite seznam odjemalca, ker »handshake failed« pokriva štiri različne vzroke in le eden od njih je neujemanje šifre.
Usmerjanje openssl s_client na vrata VPN tudi ne ponovi vprašanja. Krmilni kanal teče znotraj OpenVPN-jevega lastnega okvirjanja, zato surova sonda TLS preizkusi drug protokol na vratih, ki pričakujejo nekaj drugega. Vsak sklep iz nje se nanaša na sondo, ne na tunel.
Zabeležite dva rezultata in ju držite ločeno
Sveža dovoljena seja ustvari vrstico krmilnega kanala z različico protokola in izbrano šifro ter ločeno vrstico podatkovnega kanala s šifro tunela. Zajemite obe z različico odjemalca in imenom profila ter zapišite, katera instanca strežnika je odgovorila:
openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt
Nato berite ti dve vrstici iz te datoteke, ne iz spomina. Par je dokaz; samo ime paketa je prednost, meja različice pa je ločena trditev o tem, kaj strežnik zavrača.
Preverbe izvedite v tem vrstnem redu. Potrdite gradnjo in backend s pomočjo --version. Zajemite --show-tls, preden karkoli spremenite. Navedite zahtevano spodnjo mejo različice ločeno od seznama paketov. Potrdite dejansko politiko delujoče instance z njenim lastnikom. Opazujte eno dovoljeno sejo in, če načrt dovoljuje, en zavrnjen poskus s starejšo različico. Zabeležite rezultate krmilnega in podatkovnega kanala kot ločene ugotovitve.
Če zahtevani odjemalec ne more doseči novega minimuma, to odločitev o selitvi ali izjemi sprejmite izrecno, namesto da tiho znižate nepovezano pravilo sprejema, da bi bila uvedba videti dokončana.