TLS raktų mainai ir kliento sertifikatas: kuris prisijungia?
Atskirkite raktų susitarimą nuo kliento autentifikavimo ir programos tapatybės, o tada perskaitykite rankos paspaudimo pranešimus, kurie rodo, ką jungtis iš tikrųjų naudojo.
Viešos raktų mainų reikšmės nešimas rankos paspaudime nėra tas pats įvykis kaip kliento prisijungimas. Vienas nustato kriptografinę jungties būseną; kitas pasako, kas yra klientas, ir tai vyksta tik tada, kai serveris to prašo ir mainai tai palaiko. Pirmąjį palaikant antruoju daromos klaidingos išvados apie tai, ką VPN slepia, o ko ne. Perskaitykite pranešimus ir tada nuspręskite, kurią iš keturių savybių iš tikrųjų pastebėjote.
Du objektai, kurie įraše atrodo vienodai
TLS 1.3 klientas gali pateikti raktų mainų medžiagą pirmame skrydyje, nepateikdamas jokio sertifikato. Šis indėlis viešas pagal sumanymą, nes serveriui jo reikia bendrai paslaptiai išvesti. Kliento sertifikatas yra kita žinutė ir siunčiamas tik po to, kai serveris jo paprašo. Jis neša tapatybę, kurią serveris vėliau patikrina, o abipusė autentifikacija yra serverio sprendimas, o ne savybė, kurią numato šifrų rinkinys. Programos tapatybė yra visiškai trečias dalykas: prisijungimo forma, nešėjo žetonas, slapukas. Nė vienas iš jų nepasireiškia rankos paspaudime, ir visi jie išlieka pasikeitus tinklo keliui.
| Object in play | What it establishes |
|---|---|
| Key-exchange share | Cryptographic state for this connection |
| Server certificate | Which server the client reached |
| Client certificate | Client authentication, when requested |
| Application session | Account identity inside the application |
Keturios eilutės yra nepriklausomos. Jungtis gali turėti pirmą ir antrą eilutes, praleisti trečią ir vis tiek nešti ketvirtą slapuko antraštėje.
Nuspręskite, ką gali įrodyti užfiksuotas rankos paspaudimas
Vien iš rankos paspaudimo stebėtojas sužino suderintą versiją, šifrų rinkinį, serverio sertifikatą ir viešas raktų mainų reikšmes. To pakanka kliento diegimo pirštų atspaudui paimti ir pamatyti, su kuriuo serveriu ryšys užmegztas. Ko tai neduoda, yra privati būsena, reikalinga jungčiai iššifruoti; jos slaptumas remiasi efemeriškais mainais, o ne viešąja dalimi. Tai neduoda ir paskyros tapatybės, kurios nuo pat pradžių rankos paspaudime nebuvo.
Taigi sąžininga išvada siaura: šiuose mainuose nebuvo pateiktas joks kliento sertifikatas. Kalbama ne apie tai, kad klientas nesiuntė nieko susiejamo, ir tikrai ne apie tai, kad sesija neturėjo jokio identifikatoriaus.
Skaitykite pranešimus, o ne šifro pavadinimą
Klauskite serverio, ko jis prašo, o ne spėkite iš šifrų rinkinio. TLS 1.3 rankos paspaudimas su sertifikato užklausa matomas įraše, o jo nebuvimas taip pat matomas.
openssl s_client -connect app.example.net:443 -tls1_3 -msg < /dev/null 2>&1 | grep -i -E 'key_share|CertificateRequest'
Tada pakartokite su sukonfigūruotu kliento sertifikatu ir palyginkite. Antrasis paleidimas turėtų parodyti sertifikatą siunčiamą ir priimamą; pirmasis neturėtų rodyti nieko, ir tai yra konkretus skirtumas, dėl kurio ginčijamasi.
openssl s_client -connect app.example.net:443 -tls1_3 -cert client.pem -key client.key -quiet
Jei jums reikia tik įprasto naršymo atvejo, išsamus kliento išvestis pakanka pamatyti protokolo versiją, patikros rezultatą ir ar kliento sertifikatas buvo pasiūlytas. Serveris, kuris niekada nesiunčia sertifikato užklausos, negalėjo jo gauti.
Kur atnaujinimas pakeičia atsakymą
TLS 1.3 atnaujinimas naudoja bilietus, susietus su slapta būsena, todėl vėlesnė jungtis gali baigtis be visiško sertifikatų mainų. Tai sumažina, ką mato stebėtojas, ir pakeičia, ką įrodo įrašas. Tai nesukuria tapatybės ten, kur jos nebuvo. Atnaujinta sesija vis dar priklauso tai pačiai programos sesijai, ir bet koks slapukas ar žetonas toje sesijoje išlieka svarbiu identifikatoriumi.
Štai kodėl privatumo apžvalga, kuri sustoja ties "jokio kliento sertifikato", praleidžia įdomiausią dalį. Klausti reikia, kuri šalis turi stabilų identifikatorių, o ne kuri žinutė viename rankos paspaudime trūko.
Užrašykite keturias savybes, o ne vieną nuosprendį
Užsirašykite raktų susitarimą, serverio patikrą, kliento autentifikavimą ir programos tapatybę kaip keturias atskiras eilutes, su kiekvienos įrodymais. Šis sąrašas išlieka keičiantis protokolo versijai, ir jis daro privatumo argumentą patikrinamą kitam žmogui. Tada pridėkite, ką duoda tinklo kelias. VPN pakeičia šaltinio adresą, kurį mato paslauga; jis nepašalina prisijungimo, slapuko ar įrenginio pirštų atspaudo, kuriuos programa jau turi.
Užrašykite jungties suderintą versiją ir sertifikato užklausos rezultatą kartu, nes būtent šios poros recenzentui reikia jūsų išvadai atkurti be savo įrašo.