Satu sisi terowong menandatangani saluran kawalan dengan slot kunci yang tidak pernah diperiksa oleh sisi lain, dan sambungan mati dengan ralat pengesahan sebelum satu sijil pun ditukar. Begitulah ketidakpadanan arah pada tls-auth, dan ia bersifat deterministik: dua fail yang sama gagal pada setiap percubaan, dari mana-mana rangkaian. Tiada apa dalam log yang menamakan pilihan yang anda cari, sebab itu orang membina semula kunci dan mengeluarkan semula sijil yang tidak pernah rosak. Penyelesaiannya ialah menjadikan kedua-dua hujung saling melengkapi, atau membiarkan kedua-duanya dua hala, bukan melemahkan pengesahan.

Kegagalan berlaku sebelum sijil

Dengan tls-auth, kedua-dua rakan memegang kunci kongsi yang sama dan masing-masing menggunakan salah satu daripada dua slot yang diterbitkan daripadanya: satu slot menandatangani paket kawalan keluar, satu lagi mengesahkan paket masuk. Arah 0 dan arah 1 menetapkan peranan itu dalam susunan bertentangan, jadi pasangan itu mesti saling melengkapi agar pemeriksaan HMAC sepadan. Apabila penetapan diterbalikkan pada satu sisi, penerima mencari tandatangan dalam slot yang salah dan menolak paket itu. Sesi berakhir di situ, sebab itu ralat itu berkaitan pengesahan paket dan bukan sesuatu yang akan dihasilkan oleh stor sijil.

Determinisme penting untuk diagnosis, kerana masalah masa atau laluan meninggalkan kesan berbeza: terputus-putus, satu arah gagal, atau sesi yang mati hanya pada rangkaian tertentu. Ketidakpadanan arah gagal pada jabat tangan pertama setiap kali, dan ia gagal secara identik pada mesin lain yang memegang dua fail yang sama. Baca log pada --verb 4 dan cari paket pertama yang ditolak, bukan baris terakhir. Jika penolakan itu berlaku sebelum sebarang pertukaran sijil, kunci kongsi dan arahnya ialah dua perkara yang wajar diperiksa.

What you seeWhat it rules outNext check
Authentication error before any certificate is sentThe data channel is irrelevant; the control channel never authenticatedCompare tls-auth and its direction on both ends
Certificate or handshake failure after the control channel authenticatesThe shared key and its direction already agreeCheck the CA, the certificate dates and the hostname
Session completes but throughput or cipher warnings appearDirection was never the problemCompare the data-channel cipher settings
Startup stops on an options errorThe number itself is not the issueRe-read the inline versus external directive syntax

Di mana nombor itu tinggal

Manual OpenVPN 2.6 mendokumenkan dua tempat untuk arah: argumen kedua tls-auth apabila kunci berada dalam fail tersendiri, dan baris key-direction berasingan apabila kunci disisipkan dalam profil. Kedua-duanya menetapkan nilai yang sama, jadi profil harus menggunakan satu bentuk atau yang lain, tidak pernah kedua-duanya. Meninggalkannya juga satu pilihan, dan ia meletakkan kedua-dua rakan dalam susunan dua hala yang berfungsi apabila tiada sisi menamakan arah. Dua rakan yang membawa nombor sama tidak berada dalam susunan itu: masing-masing menjangka menandatangani dalam satu slot dan mengesahkan dalam slot lain, dan kedua-duanya melakukannya dengan cara yang sama.

# server.conf, external key
tls-auth ta.key 0

# client.ovpn, external key
tls-auth ta.key 1

# client.ovpn, inline key
key-direction 1

Bentuk sisipan ialah arahan pada barisnya sendiri, bukan atribut pada tag pembuka blok kunci, dan menambah argumen pada tag itu ialah ralat, bukan perubahan arah. Kedudukan juga penting: arahan itu berada di luar blok yang menjadi miliknya, jadi nilai yang ditulis di dalam blok dibaca sebagai bahan kunci. Salin susunan yang dimaksudkan oleh pengedar profil dan bukan mengarang pasangan, kerana profil yang berfungsi terhadap satu pelayan mungkin sudah dicerminkan di sisi lain.

Apa yang dibiarkan oleh pilihan ini

Ia tidak menyulitkan trafik aplikasi. tls-auth meletakkan HMAC di sekeliling paket saluran kawalan, manakala saluran data dilindungi oleh kunci sesi yang dirundingkan semasa jabat tangan, jadi soalan tentang daya pemprosesan atau sifer tiada kaitan dengan nombor arah. Tetapan ini juga tidak menambah lapisan penyulitan kedua, dan andaian itulah yang menghantar orang mencari kunci yang lebih panjang.

Ia tidak terpakai pada tls-crypt, mekanisme saluran kawalan lain dengan pilihan dan pengendalian kunci tersendiri, dan ia tidak mengatakan apa-apa tentang identiti sijil mana-mana rakan. Jadi padanan arah yang berfungsi hanya membuktikan kedua-dua hujung bersetuju cara mengesahkan saluran kawalan, bukan bahawa rantai kepercayaan telah disahkan.

Sejajarkan pasangan itu, kemudian sambung semula

Bandingkan kedua-dua konfigurasi sebelum menukar mana-mana satu, kerana menyunting sisi yang sudah betul menggandakan kerja. Grep di bawah menunjukkan mekanisme yang dipilih setiap fail; larian terperinci menunjukkan sama ada saluran kawalan disahkan sama sekali. Simpan kedua-dua output, supaya perubahan seterusnya boleh dibandingkan dengan keadaan yang diketahui.

grep -n -E 'tls-auth|tls-crypt|key-direction' server.conf client.ovpn
openvpn --config client.ovpn --verb 4 2>&1 | grep -i -E 'hmac|tls error|control channel'

Mulakan semula kedua-dua rakan selepas setiap perubahan, kerana pilihan ini dibaca sekali semasa permulaan dan memuat semula satu sisi membiarkan pasangan tidak konsisten sepanjang hayat sesi lama. Jika penggunaan kini berfungsi tanpa arah dikonfigurasikan, menambah tetapan pada satu rakan menghasilkan semula kegagalan yang anda mulakan; biarkan kedua-duanya atau konfigurasikan kedua-duanya. Tukar satu hujung pada satu masa dan simpan fail sebelumnya, supaya regresi menjadi pemulihan dua minit dan bukan pembinaan semula.

Catat mekanisme, fail kunci dan arah untuk setiap hujung dalam nota penggunaan, kerana jika tidak orang seterusnya akan membaca dua fail serupa dan menganggap nombor itu harus sepadan antara satu sama lain. Arah ialah butiran penyelarasan, bukan peningkatan keselamatan: ia memisahkan dua arah saluran kawalan dan tidak melakukan apa-apa lagi.

Artikel berkaitan