Satu perangkat lama muncul, gagal terhubung, dan perbaikan yang tampak paling cepat adalah melemahkan seluruh host sampai koneksi berhasil. Pertukaran itu tidak terlihat saat dilakukan dan permanen dalam praktik, karena tidak ada yang mencabut batas keamanan yang akhirnya berfungsi. Dua kerusakan yang sangat berbeda menciptakan tekanan ini, dan hanya satu di antaranya benar-benar soal cipher. Urutkan dulu kerusakannya, lalu letakkan pengecualian di tempat yang tidak bisa menyebar.

Pisahkan kedua kegagalan sebelum mengubah direktif

Baris log server tentang tidak ada cipher bersama, atau tentang versi protokol yang tidak didukung, berasal dari kanal kontrol: kedua ujung tidak bisa menyepakati cara melindungi negosiasi itu sendiri. Baris klien yang menyatakan bahwa tidak ada metode verifikasi sertifikat server yang diaktifkan berasal dari tempat yang sama sekali lain, karena klien itu sama sekali tidak memeriksa siapa yang menjawab. Mengganti cipher data tidak berpengaruh pada kasus kedua, dan menambahkan pemeriksaan peran tidak berpengaruh pada kasus pertama.

Ambil baris gagal paling awal dari masing-masing pihak, bukan baris terakhir sebelum koneksi terputus, karena baris terakhir biasanya hanya akibat. Lalu pastikan file mana yang sebenarnya dibuka klien: profil yang diimpor sering ada dua kali dengan nama tampilan berbeda, dan mengedit salinan yang tidak dibaca siapa pun menghasilkan ketiadaan perubahan yang meyakinkan. Proses yang sedang berjalan tetap memakai pengaturan saat ia dimulai, jadi file yang disimpan bukanlah file yang dimuat. Perintah di bawah ini menampilkan negosiasi klien di samping pandangan server atas percobaan yang sama.

openvpn --config <profile>.ovpn --verb 4 2>&1 | head -n 40
journalctl -u [email protected] --since '-10 min' | grep -iE 'cipher|tls|verify'

Listener kedua adalah tempat yang jujur untuk batas yang lebih lemah

Ketika perangkat itu mentok di TLS 1.0 dengan kanal data pra-2.5, server harus menawarkan batas kanal kontrol yang lebih rendah dan cipher data yang dikenali klien lama. Direktif fallback ada persis untuk perangkat seperti itu, sementara daftar cipher menjaga klien modern tetap pada suite modern. Kedua direktif itu milik listener, bukan milik pengguna atau koneksi, dan tidak ada opsi per klien yang mempersempitnya setelahnya. Itulah sebabnya satu perangkat warisan di port utama adalah keputusan tentang setiap perangkat yang berbagi port itu.

Di tempat platform mengizinkannya, jalankan listener warisan sebagai instansinya sendiri di port terpisah, izinkan port itu hanya dari alamat perangkat, dan biarkan layanan utama apa adanya. Tuliskan alasan keberadaan listener kedua di dalam file yang memuat konfigurasinya, karena pembersihan di masa depan akan membacanya sebagai sisa barang bekas. Pemisahan itu hanya bernilai jika batas yang lebih lemah berakhir di tempat perangkat itu berakhir.

tls-version-min 1.0
data-ciphers AES-128-GCM:AES-256-GCM:AES-256-CBC
data-ciphers-fallback AES-256-CBC

Apa yang sebenarnya dirusak oleh sertifikat penyedia lama

Galat verifikasi itu adalah ikatan peran yang hilang: tanpanya klien akan menerima sertifikat apa pun yang berantai ke CA tepercaya, entah sertifikat itu diterbitkan untuk server atau tidak. Ikat sertifikat ke peran server lebih dulu, dan perlakukan ikatan itu sebagai persyaratan, bukan tombol penyetelan. Hanya profil yang masih gagal setelah langkah itu yang benar-benar punya masalah sertifikat.

Sertifikat penyedia lama yang ukuran kuncinya atau algoritme tanda tangannya tidak lagi memenuhi kebijakan bawaan OpenSSL adalah kasus untuk perubahan tingkat keamanan yang dibatasi pada kanal kontrol. Menurunkan tingkat di sana tidak mematikan verifikasi, dan sama sekali tidak boleh digabungkan dengan CA kosong, pengaturan verifikasi yang dimatikan, atau nama host yang tidak diperiksa. Simpan baris itu di dalam satu profil yang membutuhkannya; mengekspor konfigurasi OpenSSL yang dilonggarkan secara global akan menyerahkan pelonggaran yang sama kepada setiap program di mesin.

remote-cert-tls server
tls-cipher "DEFAULT:@SECLEVEL=0"

Membaca nilai yang dinegosiasikan, bukan spanduknya

Pada verbosity 4, kedua ujung mencetak versi TLS kanal kontrol dan cipher yang mereka sepakati, serta cipher data untuk sesi itu. Bacalah baris tersebut, bukan spanduk inisialisasi, yang melaporkan keberhasilan dan bukan syarat-syaratnya. Lalu sambungkan kembali klien modern ke listener utama dan pastikan klien itu masih mendarat di suite modern, karena pengecualian yang bocor ke konfigurasi bersama akan muncul di sini lebih dulu. Nilai yang Anda salin menjadi dasar untuk peninjauan berikutnya.

Uji perangkat lama itu sendiri: perangkat itu harus terhubung, dan harus menjadi satu-satunya sesi dalam log yang menunjukkan parameter lebih lemah. Jika perangkat kedua juga menegosiasikan suite lama, pengecualiannya lebih luas dari yang dimaksudkan dan pemisahan listener sebenarnya tidak terjadi. Catat kedua pengamatan itu, bukan hanya kesimpulannya.

Setiap pengecualian perlu pemilik dan tanggal

Pengecualian tanpa syarat pencabutan diam-diam menjadi bawaan, jadi letakkan perangkat, pemilik, alasan, dan tanggal berakhirnya di samping konfigurasi yang dibenarkannya. Tanpa baris itu, batas yang lebih lemah akan hidup lebih lama daripada perangkat keras yang membutuhkannya.

Mengganti klien, atau meminta profil terkini kepada penyedia, adalah hasil yang harus dituju; pengecualian hanyalah penundaan dan bukan desain. Saat perangkat dipensiunkan, hapus listener dan profil dalam satu perubahan yang sama agar tidak ada separuh yang tetap berjalan. Semua ini tidak membuat parameter lama aman, hanya mencegah batas satu perangkat menjadi dasar semua orang.

Artikel terkait