OpenVPN tls-ciphersuites vs. tls-version-min: mitä kumpikin pakottaa
TLS 1.3 -pakettien luettelo ei rajaa protokollaversiota, ja show-tls näyttää vain paikallisen tuen. Tarkista käytäntö, paketit ja neuvotellut tulokset erikseen.
Kolme eri tosiasiaa sullotaan yhdelle riville useimmissa OpenVPN- ja TLS-keskusteluissa: mitä asiakasbuildisi osaa, mitä profiili sallii ja mitä istunto todella neuvotteli. Lyhyt TLS 1.3 -pakettien luettelo vastaa vain puolittain keskimmäiseen kysymykseen eikä kerro mitään protokollaversion alarajasta. Käy alla olevat tarkistukset järjestyksessä läpi ja pysähdy ensimmäiseen, joka ei pidä, sillä jokainen myöhempi tarkistus olettaa aiempien olevan selvitettyjä.
Tarkista buildi ennen kuin luet mitään luetteloa
Asetusdirektiivi ei voi lisätä protokollatukea binääriin, josta se puuttuu. Aloita versiobannerista, joka nimeää käännönaikaisen salauskirjaston:
openvpn --version
OpenSSL:ään linkitetty 2.6-buildi hyväksyy sekä tls-cipher että tls-ciphersuites. mbed TLS:ään tehty buildi ei tue lainkaan TLS 1.3 -pakettien valintaa, ja 2.6-käsikirja merkitsee tls-ciphersuites OpenSSL-asetukseksi. Jos palvelin rakennetaan uudelleen toisella backendillä, sama profiili voi muuttaa käyttäytymistään ilman, että yksikään asetusrivi muuttuu.
Kun olet täällä, aja openvpn --show-tls ja säilytä tuloste. Se on luettelo, johon vertaat myöhemmin, ja sen tallentaminen on halpaa ennen kuin kukaan alkaa muokata profiileja.
Kirjoita banneri ja luettelo muutostikettiin, älä chat-ikkunaan. Kun kaksi ihmistä kiistelee siitä, voisiko asiakas tarjota pakettia kuuden viikon kuluttua, tallennettu tuloste ratkaisee sen yhdellä rivillä.
Pidä versiorajat erillään salausluetteloista
2.6-käsikirjassa nämä ovat kolme säädintä, ei yksi:
tls-cipherasettaa salausten käytännön TLS 1.2:lle ja sitä vanhemmille, ja se välitetään OpenSSL:n salausluettelolle;tls-ciphersuitesvalitsee TLS 1.3 -paketit;tls-version-minjatls-version-maxrajaavat protokollaversiot, joita yhteys saa käyttää.
Huolellisesti karsittu TLS 1.3 -pakettien luettelo ei siis todista mitään siitä, että vanhempi versio olisi yhä sallittu. Jos vaatimus on ”vain TLS 1.3”, version alaraja kantaa sen, ja pakettiluettelo vain kaventaa valintoja kyseisen rajan sisällä:
tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
Tämä pari tekee kaksi työtä. Toisen rivin poistaminen jättää toisen valvomaan vähemmän kuin luulet, ja juuri se on se vika, jonka takia koko tarkistus on olemassa.
Datakanava on neljäs säädin. data-ciphers neuvottelee symmetrisen salauksen tunnelin sisällä, eikä sen tulos kerro mitään ohjauskanavan TLS-versiosta. AES-256-GCM:n näkeminen istunnon yhteenvedossa ei ole todiste TLS 1.3:sta kumpaankaan suuntaan.
Lue show-tls paikallisena luettelona
--show-tls luettelee paketit, joita tämän binäärin linkittämä salauskirjasto tukee, etusijajärjestyksessä. Se ei ole gatewayn raportti. Käsikirja sanoo selvästi, että luettelo tulee paikallisesta kirjastosta, mikä tarkoittaa, että OpenSSL 3.x:llä varustettu kannettava ja vanhemmalla buildilla varustettu reititin tulostavat eri luettelot puhuessaan samalle palvelimelle.
| 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 |
Oletetaan, että asiakas tukee paketteja A, B ja C ja yksi istunto valitsee B:n. Se ei todista mitään siitä, salliiko palvelin A:n tai C:n, eikä siitä, onko B sen ainoa sallittu vaihtoehto. Pidä kolme riviä erillään, niin useimmat sekavat TLS-ketjut ratkeavat itsestään.
Luettelo kannattaa silti säilyttää. Kun istunto epäonnistuu, kirjaston luettelon vertaaminen profiilin luetteloon kertoo, oliko asiakkaalla ylipäätään mahdollisuutta tarjota sitä, mitä palvelin halusi. Se näyttää myös, poistikö backend-muutos hiljaa TLS_CHACHA20_POLY1305_SHA256-paketin varannosta, josta vanhemmat asiakkaat ovat riippuvaisia — juuri sellainen regressio, joka ilmenee kourallisena käyttäjiä, jotka eivät saa yhteyttä, kun taas kaikki muut eivät huomaa mitään.
Kysy gatewaylta jotain, mihin se osaa vastata
Jos hallinnoit palvelua, tarkastele käynnissä olevan instanssin tehokasta kokoonpanoa äläkä levyllä olevaa tiedostoa. OpenVPN on voitu käynnistää toisella --config-polulla, se voi hakea liitteitä, eikä sitä ehkä ole käynnistetty uudelleen muokkauksen jälkeen. Käynnissä olevan daemonin käytäntö on se, mitä asiakkaat kohtaavat.
Jos et hallinnoi sitä, kysy operaattorilta tuettuja asiakasvaatimuksia tai rajattua hyväksymistestiä. Hylätty yritys ei ole automaattisesti hylätty paketti: version alaraja, varmenteen identiteettitarkistukset kuten remote-cert-tls tai tls-auth- ja tls-crypt-asetusten välinen ristiriita voivat päättää vaihdon ennen kuin pakettivalinta ehtii merkitä mitään. Lue palvelimen virhe ennen asiakkaan luettelon muuttamista, sillä ”handshake failed” kattaa neljä eri syytä ja vain yksi niistä on salauksen ristiriita.
openssl s_client-komennon osoittaminen VPN-porttiin ei sekään toista kysymystä. Ohjauskanava kulkee OpenVPN:n omassa kehystyksessä, joten raaka TLS-koetin testaa toista protokollaa portissa, joka odottaa jotain muuta. Mikä tahansa siitä tehty johtopäätös koskee koetinta, ei tunnelia.
Kirjaa kaksi tulosta ja pidä ne erillään
Tuore sallittu istunto tuottaa ohjauskanavan rivin, joka nimeää protokollaversion ja valitun salauksen, sekä erillisen datakanavan rivin, joka nimeää tunnelin salauksen. Tallenna molemmat asiakasversion ja profiilin nimen kanssa ja merkitse, mikä palvelininstanssi vastasi:
openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt
Lue sitten kaksi riviä siitä tiedostosta äläkä muistista. Pari on todiste; pelkkä paketin nimi on mieltymys, ja versioraja on erillinen väite siitä, mitä palvelin kieltäytyy hyväksymästä.
Tee tarkistukset tässä järjestyksessä. Vahvista buildi ja backend komennolla --version. Tallenna --show-tls ennen kuin muutat mitään. Ilmoita vaadittu version alaraja erillään pakettiluettelosta. Vahvista käynnissä olevan instanssin tehokas käytäntö sen omistajan kanssa. Havainnoi yksi sallittu istunto ja, jos suunnitelma sallii, yksi hylätty vanhemman version yritys. Kirjaa ohjauskanavan ja datakanavan tulokset erillisinä havaintoina.
Jos vaadittu asiakas ei pysty täyttämään uutta minimiä, tee se migraatio- tai poikkeuspäätös eksplisiittisesti sen sijaan, että hiljaa laskisit asiattoman hyväksymissäännön, jotta käyttöönotto näyttäisi valmiilta.