Pertukaran kunci TLS versus sertifikat klien: mana yang masuk?
Pisahkan kesepakatan kunci dari autentikasi klien dan identitas aplikasi, lalu baca pesan jabat tangan yang menunjukkan mana yang benar-benar dipakai koneksi.
Membawa nilai pertukaran kunci publik dalam jabat tangan bukan peristiwa yang sama dengan klien masuk. Yang satu menetapkan keadaan kriptografis untuk koneksi; yang lain menyatakan siapa klien, dan itu hanya terjadi ketika server memintanya dan pertukaran mendukungnya. Memperlakukan yang pertama sebagai yang kedua menuntun pada kesimpulan keliru tentang apa yang disembunyikan VPN dan apa yang tidak. Baca pesannya, lalu tentukan sifat mana dari empat yang benar-benar Anda amati.
Dua objek yang tampak sama dalam tangkapan
Klien TLS 1.3 dapat menyumbang materi pertukaran kunci pada penerbangan pertamanya tanpa menyajikan sertifikat apa pun. Sumbangan itu publik secara desain, karena server memerlukannya untuk menurunkan rahasia bersama. Sertifikat klien adalah pesan lain, yang hanya dikirim setelah server memintanya. Ia membawa identitas yang kemudian diverifikasi server, dan autentikasi timbal balik adalah keputusan server, bukan sifat yang tersirat oleh suite sandi. Identitas aplikasi adalah hal ketiga yang sama sekali berbeda: formulir masuk, token pembawa, kuki. Tidak satu pun muncul di jabat tangan, dan semuanya bertahan saat jalur jaringan berubah.
| 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 |
Keempat baris itu independen. Koneksi dapat memiliki baris satu dan dua, melewati baris tiga, dan tetap membawa baris empat dalam tajuk kuki.
Tentukan apa yang dapat dibuktikan jabat tangan yang tertangkap
Dari jabat tangan saja, pengamat mengetahui versi yang dinegosiasikan, suite sandi, sertifikat server, dan nilai pertukaran kunci publik. Itu cukup untuk mengambil sidik jari implementasi klien dan melihat server mana yang dihubungi. Yang tidak diberikannya adalah keadaan privat yang diperlukan untuk mendekripsi koneksi, yang kerahasiaannya bersandar pada pertukaran efemeral dan bukan pada bagian publik. Ia juga tidak memberikan identitas akun, yang sejak awal tidak pernah ada di jabat tangan.
Jadi kesimpulan jujurnya sempit: tidak ada sertifikat klien yang disajikan dalam pertukaran ini. Bukan berarti klien tidak mengirim apa pun yang dapat ditautkan, dan jelas bukan berarti sesi tidak membawa pengenal apa pun.
Baca pesannya, bukan nama sandi
Tanyakan kepada server apa yang dimintanya, bukan menyimpulkan dari suite sandi. Jabat tangan TLS 1.3 yang memuat permintaan sertifikat terlihat dalam transkrip, dan ketiadaannya sama terlihatnya.
openssl s_client -connect app.example.net:443 -tls1_3 -msg < /dev/null 2>&1 | grep -i -E 'key_share|CertificateRequest'
Lalu ulangi dengan sertifikat klien terkonfigurasi, dan bandingkan. Jalankan kedua seharusnya menunjukkan sertifikat dikirim dan diterima; yang pertama seharusnya tidak menunjukkan apa pun, dan itulah perbedaan konkret yang diperdebatkan.
openssl s_client -connect app.example.net:443 -tls1_3 -cert client.pem -key client.key -quiet
Jika Anda hanya perlu kasus peramban biasa, keluaran klien yang bertele-tele cukup untuk melihat versi protokol, hasil verifikasi, dan apakah sertifikat klien ditawarkan. Server yang tidak pernah mengirim permintaan sertifikat tidak mungkin menerima satu.
Di mana pelanjutan mengubah jawaban
Pelanjutan TLS 1.3 memakai tiket yang terkait dengan keadaan rahasia, sehingga koneksi berikutnya dapat selesai tanpa pertukaran sertifikat penuh. Itu mengurangi apa yang dilihat pengamat dan mengubah apa yang dibuktikan transkrip. Itu tidak menciptakan identitas di tempat yang tidak ada. Sesi yang dilanjutkan tetap milik sesi aplikasi yang sama, dan kuki atau token apa pun dalam sesi itu tetap menjadi pengenal yang penting.
Itulah sebabnya tinjauan privasi yang berhenti pada "tidak ada sertifikat klien" melewatkan bagian yang menarik. Pertanyaannya adalah pihak mana yang memegang pengenal stabil, bukan pesan mana yang absen dari satu jabat tangan.
Catat empat sifat, bukan satu putusan
Tuliskan kesepakatan kunci, verifikasi server, autentikasi klien, dan identitas aplikasi sebagai empat baris terpisah, dengan bukti untuk masing-masing. Inventaris itu bertahan terhadap perubahan versi protokol, dan membuat argumen tentang privasi dapat diperiksa orang lain. Lalu tambahkan kontribusi jalur jaringan. VPN mengubah alamat sumber yang dilihat layanan; ia tidak menghapus login, kuki, atau sidik jari perangkat yang sudah dipegang aplikasi.
Catat versi yang dinegosiasikan koneksi dan hasil permintaan sertifikat bersama-sama, karena pasangan itulah yang dibutuhkan peninjau untuk mereproduksi kesimpulan Anda tanpa tangkapan sendiri.