Tiga fakta berbeda dilebur menjadi satu baris dalam sebagian besar diskusi OpenVPN TLS: apa yang bisa dilakukan build klien Anda, apa yang diizinkan profil, dan apa yang sebenarnya dinegosiasikan sesi. Daftar suite TLS 1.3 yang pendek hanya menjawab separuh pertanyaan tengah, dan tidak mengatakan apa pun tentang batas bawah versi protokol. Jalankan pemeriksaan di bawah ini secara berurutan dan berhenti pada yang pertama tidak berlaku, karena setiap pemeriksaan berikutnya mengasumsikan yang sebelumnya sudah beres.

Periksa build sebelum membaca daftar apa pun

Direktif konfigurasi tidak dapat menambahkan dukungan protokol ke biner yang tidak memilikinya. Mulailah dengan banner versi, yang menyebutkan pustaka kripto hasil kompilasi:

openvpn --version

Build 2.6 yang ditautkan dengan OpenSSL menerima tls-cipher maupun tls-ciphersuites. Build dengan mbed TLS tidak memiliki pemilihan suite TLS 1.3 sama sekali, dan manual 2.6 menandai tls-ciphersuites sebagai opsi OpenSSL. Jika server dibangun ulang dengan backend lain, profil yang sama dapat mengubah perilakunya tanpa satu baris konfigurasi pun berubah.

Selagi di sini, jalankan openvpn --show-tls dan simpan keluarannya. Itulah inventaris yang akan Anda bandingkan nanti, dan murah untuk menangkapnya sebelum siapa pun mulai menyunting profil.

Tulis banner dan daftar itu ke tiket perubahan, bukan ke jendela obrolan. Ketika dua orang berselisih apakah klien bisa menawarkan suite dalam enam minggu, keluaran yang tertangkap menyelesaikannya dalam satu baris.

Pisahkan batas versi dari daftar cipher

Di manual 2.6 ini ada tiga kendali, bukan satu:

  • tls-cipher menetapkan kebijakan cipher untuk TLS 1.2 dan yang lebih lama, dan diteruskan ke daftar cipher OpenSSL;
  • tls-ciphersuites memilih suite TLS 1.3;
  • tls-version-min dan tls-version-max membatasi versi protokol yang boleh digunakan koneksi.

Jadi daftar suite TLS 1.3 yang dipangkas dengan cermat tidak membuktikan apa pun tentang versi lama yang masih diizinkan. Jika persyaratannya «hanya TLS 1.3», batas bawah versi yang menopangnya, dan daftar suite hanya mempersempit pilihan di dalam batas itu:

tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

Pasangan itu melakukan dua tugas. Menghapus salah satu baris membuat yang lain menegakkan lebih sedikit dari yang Anda kira, dan itulah kegagalan yang menjadi alasan seluruh pemeriksaan ini ada.

Kanal data adalah kendali keempat. data-ciphers menegosiasikan cipher simetris di dalam terowongan, dan hasilnya tidak mengatakan apa pun tentang versi TLS kanal kendali. Melihat AES-256-GCM di ringkasan sesi bukan bukti tentang TLS 1.3 ke arah mana pun.

Baca show-tls sebagai inventaris lokal

--show-tls menghitung suite yang didukung pustaka kripto yang ditautkan ke biner ini, dalam urutan preferensi. Ini bukan laporan dari gateway. Manual menyatakan secara eksplisit bahwa daftar itu berasal dari pustaka lokal, yang berarti laptop dengan OpenSSL 3.x dan router dengan build lebih lama akan mencetak daftar berbeda saat berbicara dengan server yang sama.

EvidenceWhat it actually describes
--show-tls outputCapabilities of this client build and its library
Profile directivesWhat this attempt is allowed to offer
Session log lineWhat this one negotiation selected

Misalkan klien mendukung suite A, B, dan C dan satu sesi memilih B. Itu tidak menetapkan apa pun tentang apakah server mengizinkan A atau C, maupun apakah B satu-satunya pilihan yang diizinkan. Pisahkan ketiga baris, dan sebagian besar utas TLS yang membingungkan akan selesai dengan sendirinya.

Inventaris tetap layak disimpan. Ketika sesi gagal, membandingkan daftar pustaka dengan daftar profil memberi tahu Anda apakah klien punya peluang menawarkan apa yang diinginkan server. Itu juga menunjukkan apakah perubahan backend diam-diam menghapus TLS_CHACHA20_POLY1305_SHA256 dari kumpulan yang diandalkan klien lama — jenis regresi yang muncul sebagai segelintir pengguna yang gagal terhubung sementara semua orang tidak menyadari apa pun.

Tanyakan kepada gateway sesuatu yang bisa dijawabnya

Jika Anda mengelola layanan, periksa konfigurasi efektif instans yang berjalan, bukan berkas di disk. OpenVPN mungkin dijalankan dengan jalur --config lain, mungkin menarik include, dan mungkin belum dimulai ulang sejak penyuntingan. Kebijakan daemon yang berjalan itulah yang ditemui klien.

Jika Anda tidak mengelolanya, mintalah persyaratan klien yang didukung atau uji penerimaan yang terbatas kepada operator. Upaya yang ditolak bukan otomatis suite yang ditolak: batas bawah versi, pemeriksaan identitas sertifikat seperti remote-cert-tls, atau ketidakcocokan antara tls-auth dan tls-crypt dapat mengakhiri pertukaran sebelum pemilihan suite menjadi penting. Baca galat server sebelum mengubah daftar klien, karena «handshake failed» mencakup empat penyebab berbeda dan hanya satu di antaranya ketidakcocokan cipher.

Mengarahkan openssl s_client ke port VPN juga tidak mereproduksi pertanyaannya. Kanal kendali berjalan di dalam bingkai OpenVPN sendiri, jadi probe TLS mentah menguji protokol lain pada port yang mengharapkan hal lain. Kesimpulan apa pun darinya adalah tentang probe, bukan tentang terowongan.

Catat dua hasil dan pisahkan keduanya

Sesi yang diizinkan dan baru menghasilkan satu baris kanal kendali yang menyebutkan versi protokol dan cipher yang dipilih, serta satu baris kanal data terpisah yang menyebutkan cipher terowongan. Tangkap keduanya bersama versi klien dan nama profil, dan catat instans server mana yang menjawab:

openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt

Lalu bacalah kedua baris itu dari berkas itu, bukan dari ingatan. Pasangan itulah buktinya; nama suite saja adalah preferensi, dan batas versi adalah pernyataan terpisah tentang apa yang ditolak server.

Lakukan pemeriksaan dalam urutan ini. Konfirmasi build dan backend dengan --version. Tangkap --show-tls sebelum mengubah apa pun. Nyatakan batas bawah versi yang diperlukan terpisah dari daftar suite. Konfirmasi kebijakan efektif instans yang berjalan dengan pemiliknya. Amati satu sesi yang diizinkan dan, jika rencana memungkinkan, satu upaya versi lama yang ditolak. Catat hasil kanal kendali dan kanal data sebagai temuan terpisah.

Jika klien yang diwajibkan tidak dapat memenuhi minimum baru, ambil keputusan migrasi atau pengecualian itu secara eksplisit alih-alih diam-diam menurunkan aturan penerimaan yang tidak terkait agar peluncuran terlihat selesai.

Artikel terkait