OpenSSL sudah dipasang, hos mempunyai entropi, dan menjana kunci dengannya terasa seperti jalan pintas yang jelas. Outputnya akan rawak dan rahsia dan sama sekali tidak boleh digunakan, dan kegagalan muncul sebagai ralat saluran kawalan dan bukannya sesuatu yang menyebut format kunci. Salah arah itulah bahagian yang mahal, kerana ia menghantar orang memeriksa sifer mereka. Apa yang VPN baca ialah struktur fail tertentu, bukan blok bait sembarangan, dan salah satu varian ciri itu sama sekali tidak boleh dihasilkan di luar pelayan.

Apa yang sebenarnya perlu ada pada fail di cakera

Fail kunci statik OpenVPN ialah teks. Ia bermula dengan baris komen yang menyatakan apa ia, membawa data heks dalam baris selebar tetap, dan berjumlah 256 bait bahan kunci. OpenVPN membacanya sebagai rahsia bersama saluran kawalan, bukan sebagai sijil, bukan sebagai frasa laluan dan bukan sebagai sesuatu yang akan dikenali pustaka TLS.

Jenis objek yang sama melayani kedua-dua ciri saluran kawalan. Dengan tls-auth, setiap rakan juga memerlukan arah supaya paket satu pihak tidak boleh dipantulkan semula kepadanya. Dengan tls-crypt, satu rahsia bersama menyulitkan dan mengesahkan saluran kawalan dalam kedua-dua arah, yang menyembunyikan jabat tangan serta melindunginya.

Tiada satu pun daripada itu ialah pengetahuan rahsia, dan formatnya bukan intinya. Intinya ialah fail mesti sepadan tepat dengan apa yang dijangka pembaca: pengepala, lebar baris, baris baharu akhir dan jumlah panjang. Fail yang terpesong satu baris dimuatkan sebagai sampah atau gagal sepenuhnya. Membandingkan dua rakan bait demi bait kerana itu ialah ujian pertama yang sah, dan ia lebih pantas daripada membaca mana-mana satu daripada dua fail konfigurasi.

Cara yang disokong untuk membuat satu

Jana kunci statik biasa dengan alat yang akan menggunakannya, kemudian rujuk daripada kedua-dua hujung:

openvpn --genkey secret /etc/openvpn/tc-shared.key
tls-crypt /etc/openvpn/tc-shared.key

Ejaan pilihan berubah mengikut masa: pemasangan lama dari era 2.4 menggunakan bentuk dengan bendera berasingan sebelum nama fail, manakala binaan semasa menerima bentuk yang lebih pendek. Walau apa pun, fail yang terhasil ialah jenis objek yang sama, jadi pemeriksaannya ialah sama ada kedua-dua rakan memegang bait yang sama.

Generasi kedua menambah struktur yang tidak boleh dicipta oleh penjana luaran mana pun. Kunci pelayan dicipta sekali, dan setiap klien menerima kunci terbungkus yang diterbitkan daripadanya:

openvpn --genkey tls-crypt-v2-server /etc/openvpn/tc-v2-server.key
openvpn --genkey tls-crypt-v2-client /etc/openvpn/laptop1.key --tls-crypt-v2 /etc/openvpn/tc-v2-server.key

Apa yang diterima klien bukanlah kunci pelayan itu sendiri yang diduplikasi. Ia ialah objek terbungkus yang membawa metadata yang hanya pelayan boleh membukanya, dan pembungkusan itulah sebabnya fail bagi setiap peranti boleh dibatalkan tanpa menyentuh mana-mana peranti lain. Simpan kunci pelayan pada pelayan dan anggap ia sebagai akar kepercayaan bagi setiap peranti itu.

Di mana bait buatan tangan rosak

Mencetak 256 bait rawak sebagai heks di bawah pengepala yang betul secara teori akan menghasilkan fail kunci statik yang dimuatkan. Ia tetap idea buruk. Setiap butiran pemformatan menjadi peluang menghasilkan bahan yang gagal semasa dimuatkan atau, lebih teruk, meninggalkan dua rakan dengan nilai berbeza yang hanya terserlah sebagai kegagalan pengesahan.

Tiada yang setara mungkin dengan varian v2. Kunci klien terbungkus hanya wujud sebagai output proses kunci pelayan, dan pelayan menyimpan bahan yang diperlukan untuk membukanya. Blob rawak akan ditolak atau gagal dinyahsulit, dan kedua-dua mesej itu tidak akan menyebut kerawakan.

Keserasian versi terletak di atas semua ini. Generasi pertama memerlukan keluaran yang menyokongnya di kedua-dua hujung, dan generasi kedua memerlukan keluaran yang lebih baharu pula. Klien yang dibina sebelum ciri itu wujud tidak boleh melengkapkan jabat tangan dengan pelayan yang hanya menerima bahan terbungkus, dan kegagalan yang dilaporkannya menunjuk ke saluran kawalan dan bukannya ke versi.

Memutar tanpa mengunci semua orang di luar

Memutar satu rahsia bersama ialah latihan penyelarasan, bukan teknikal. Setiap klien perlu memegang fail pengganti sebelum pelayan menarik balik yang sebelumnya, dan mana-mana mesin yang masih memegang nilai lama gagal pada saat itu berlaku. Jangan mulakan putaran itu di tengah-tengah hari bekerja.

Dengan susunan v2, putaran adalah mengikut peranti: keluarkan kunci terbungkus baharu untuk satu mesin dan persarakan yang lama hanya untuk mesin itu. Itulah hujah utama untuk berpindah apabila setiap klien berada pada keluaran yang menyokongnya.

Kebenaran fail tergolong dalam perbualan yang sama. Kunci sepatutnya boleh dibaca hanya oleh akaun yang menjalankan perkhidmatan, dan ia tidak sepatutnya tinggal dalam repositori yang sama dengan profil yang dilindunginya. Rujukan OpenVPN 2.6 mendokumenkan bentuk penjanaan dan bahagian bahan kunci, yang merupakan sumber lebih baik daripada arahan yang disalin daripada catatan forum.

Artikel berkaitan