Kesalahan „tidak ada cipher bersama“ terdengar seperti satu pengaturan yang perlu diubah, dan pengaturan yang diubah kebanyakan orang justru yang salah. OpenVPN menyimpan kebijakan terpisah untuk kanal kendali yang melakukan handshake TLS dan untuk kanal data yang membawa paket di dalam tunnel, dan kesalahan itu menyebut yang pertama sementara orang mengedit yang kedua. Membandingkan apa yang diizinkan setiap peer, dalam urutan yang benar, mengubah dugaan menjadi dua atau tiga keputusan: versi, lalu daftar suite, lalu kredensial.

Salah urutan itu dan Anda bisa menghabiskan satu jam menambahkan nama AES ke daftar yang tidak pernah dibaca.

Dua daftar cipher, dan hanya satu yang merusak handshake

Kanal kendali menegosiasikan sesi TLS, dan kebijakannya ditulis dengan tls-cipher untuk TLS 1.2 dan tls-ciphersuites untuk TLS 1.3. Kanal data dikonfigurasi terpisah dengan data-ciphers, di mana ketidakcocokan menghasilkan koneksi yang terbentuk lalu tidak bisa melewatkan trafik. Keduanya menghasilkan kesalahan yang menyebut cipher, karena itu tertukar. Handshake yang tidak pernah selesai menunjuk ke kanal kendali, sedangkan tunnel yang terbentuk tetapi menjatuhkan paket menunjuk ke kanal data.

Baca pesan lengkapnya, bukan baris pertamanya. Ketidakcocokan versi, suite yang hilang, algoritme tanda tangan sertifikat yang ditolak peer, dan kegagalan verifikasi nama host semuanya berakhir pada kesalahan TLS, dan hanya satu di antaranya soal daftar suite Anda. Memisahkan kategori itu adalah sebagian besar diagnosis.

Bandingkan versi sebelum membandingkan suite

Peer yang dibatasi ke TLS 1.2 dan peer yang menuntut 1.3 tidak berbagi versi, dan tidak ada string cipher yang menjembatani itu. Catat tls-version-min dan tls-version-max di kedua sisi, atau nilai bawaan build yang dipakai, karena kebijakan OpenSSL suatu distribusi bisa menaikkan batas bawah tanpa ada opsi OpenVPN yang mengatakannya. Kalau salah satu sisi adalah perangkat atau klien pihak ketiga, jendelanya adalah apa yang diizinkan firmware-nya. Hanya setelah jendelanya tumpang tindih perbandingan suite berarti sesuatu.

Catatan itu juga harus menyebut biner yang sebenarnya. openvpn baris perintah di laptop Anda belum tentu klien yang menangani profil hasil impor.

Daftar TLS 1.2 dan TLS 1.3 tidak bercampur

Nama suite TLS 1.2 terlihat seperti ECDHE-RSA-AES256-GCM-SHA384 dan masuk ke tls-cipher, yang menerima string cipher OpenSSL. Suite TLS 1.3 dinamai seperti TLS_AES_256_GCM_SHA384 dan masuk ke tls-ciphersuites; menambahkan satu ke string 1.2 tidak mengonfigurasi daftar 1.3, dan parser bisa menerima teksnya tanpa pernah mencocokkannya. Filter yang benar untuk satu versi tidak mengatakan apa pun tentang versi lain. Tuliskan daftar mana untuk versi mana.

openvpn --show-tls mencetak apa yang didukung build lokal, dan itu inventaris, bukan janji: peer jauh mungkin tidak mengizinkan suite itu, dan profil aktif mungkin tidak mengaktifkannya. Gunakan untuk menyingkirkan build yang sama sekali tidak bisa menawarkan suite, lalu bandingkan daftar yang dikonfigurasi.

Buktikan negosiasi pada koneksi baru

Handshake yang berhasil adalah satu-satunya bukti yang dihitung, dan harus datang dari klien sungguhan dengan profil sungguhan. Naikkan verbositas server, hubungkan sekali, dan baca versi protokol serta suite yang dinegosiasikan dari log alih-alih menganggap nilai pertama yang ditawarkan menang. Lalu pastikan kanal data terpisah dengan trafik lewat tunnel, karena handshake yang bekerja dan kanal data yang gagal adalah perbaikan berbeda. Ulangi setelah setiap perubahan konfigurasi, karena profil klien yang basi adalah negatif palsu yang umum.

Jika tidak ada konfigurasi bersama yang disetujui, jawabannya adalah peningkatan atau rencana migrasi, bukan kebijakan yang dilemahkan. tls-version-min menurunkan, mematikan verifikasi, atau mengaktifkan semua suite lama menghapus penolakan tanpa memenuhi persyaratan keamanan yang menghasilkannya.

Catat versi yang dinegosiasikan, suite, dan cipher data di tiket perubahan. Orang berikutnya yang menemui kesalahan TLS akan mulai dari catatan itu, bukan dari string cipher yang ditemukan di pos forum.

Artikel terkait