Menjeda akses satu klien dan membuangnya selama-lamanya kelihatan seperti tugas yang sama sehingga anda cuba membatalkan salah satu daripadanya. Membatalkan sijil menulis rekod yang dianggap muktamad oleh pelayan, dan membalikkannya bermakna menyunting pangkalan data pengeluar secara manual. Menjatuhkan terowong yang hidup ialah arahan pengurusan yang tidak mengubah apa-apa pada kepercayaan. Pilih tuas dengan bertanya sama ada kunci itu masih dipercayai, bukan dengan bertanya betapa mendesaknya permintaan itu.

Kepercayaan: dibatalkan dan digantung ialah perkara yang sama

Seorang kontraktor dijeda selama seminggu dan gerak balasnya ialah membatalkan, kerana pembatalan kedengaran seperti mematikan sesuatu. Ia kelihatan kemas, mengambil sepuluh saat, dan meninggalkan penyuntingan pangkalan data sebagai satu-satunya jalan balik. Gerak balas itu boleh difahami dan ia lebih dekat kepada membakar pasport daripada menutup pintu. Peranti yang dijeda dan kunci yang terdedah memerlukan layanan berbeza, dan hanya satu daripadanya murah untuk dibalikkan.

Perbezaannya terletak pada kelayakan, bukan pada orangnya. Kunci yang masih berada di tangan yang betul boleh dijeda dan disambung semula tanpa sebarang kehilangan kepercayaan. Kunci yang mungkin telah disalin tidak sepatutnya dipulihkan, kerana pemulihan menegaskan bahawa salinan itu tidak wujud.

Tulis jawapannya sebelum menyentuh mana-mana satu sistem. Jika anda tidak dapat mengatakan sama ada kunci itu terdedah, jawapan konservatif ialah penggantian.

Jatuhkan sesi yang hidup dengan antara muka pengurusan

OpenVPN menyediakan antara muka pengurusan yang boleh menyenaraikan sesi dan membunuh salah satunya dengan nama biasa. Dayakan pada localhost, jauhkan daripada antara muka awam, dan hantar arahan bunuh apabila sesi perlu hilang sekarang. Arahan itu hanya menutup terowong tersebut, dan setiap klien lain terus berfungsi.

Ini ialah gerak balas kepada masalah yang aktif, bukan dasar penggantungan. Profil yang sama boleh menyambung semula dalam satu minit, kerana tiada apa-apa pada kelayakannya berubah. Gunakannya apabila sesi itu perlu pergi dan keputusan yang berkekalan masih sedang dibuat.

Sahkan sesi itu memang bersambung sebelum anda membunuhnya, supaya anda tidak memburu klien yang tidak pernah bersambung. Arahan status di bawah mencetak apa yang sedang bersambung.

printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506

Jika arahan bunuh melaporkan tiada klien sedemikian, nama biasa dalam sijil itu bukan rentetan yang anda taip. Baca output status dan bukan nama fail profil.

Apa yang sebenarnya dikawal oleh CRL

Pelayan tidak merujuk bendera pembatalan yang disimpan pada sijil. Ia membaca senarai pembatalan sijil yang dinamakan dalam crl-verify pada setiap sambungan baharu, dan menolak sijil yang nombor sirinya muncul dalam senarai itu. Dua akibat menyusul, dan kedua-duanya penting dari segi operasi. Fail itu mesti boleh dibaca oleh akaun yang pelayan turunkan keistimewaannya, dan klien yang sudah bersambung terus berjalan sehingga ia menyambung semula.

Akibat kedua itu mengejutkan orang semasa insiden. Membatalkan sijil tidak menutup terowong yang sedang menggunakannya. Pasangkan pembatalan dengan pembunuhan pengurusan jika sesi itu mesti berakhir serta-merta, dan anggap kedua-dua tindakan itu sebagai langkah berasingan dalam buku panduan.

Periksa senarai itu untuk melihat apa yang sebenarnya akan dikuatkuasakan oleh pelayan, bukannya mempercayai cap masa fail terakhir yang anda salin. Bilangan nombor siri ialah bahagian yang penting.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pem

Senarai tanpa entri dan senarai dengan entri yang betul kelihatan sama dalam penyenaraian direktori, sebab itulah bilangan nombor siri wajar dicetak. Baris kebenaran sama pentingnya, kerana fail yang tidak dapat dibaca oleh daemon menghasilkan kegagalan yang kelihatan seperti klien yang ditolak.

Memulihkan rekod, dengan berhati-hati

Memulihkan sijil bermakna membalikkan rekod dalam pangkalan data pengeluaran dan menerbitkan senarai baharu. easy-rsa 3 menyimpan pangkalan data itu sebagai index.txt di bawah direktori PKI, manakala susun atur lama menggunakan aturan yang berbeza. Satu baris bermula dengan huruf status dan tarikh luput. Baris yang dibatalkan menyisipkan cap masa pembatalan sebelum meneruskan dengan nombor siri, nama fail sijil dan nama keistimewaan. Mengembalikan baris bermakna memadam cap masa itu dan membalikkan huruf, sambil membiarkan segala-galanya tenang.

Buat salinan sandaran fail itu dahulu, dan lakukan suntingan sebagai skrip dan bukannya menaip dalam editor teks. Kesilapan taip yang mengubah berapa banyak medan yang dibawa oleh satu baris merosakkan pengeluaran bagi setiap sijil yang ditambah selepas itu. Itulah sebabnya perubahan itu wajar diautomatikkan dan fail itu disalin sebelum disentuh.

Pembatalan kedua dengan nama yang sama juga sering gagal, kerana larian pertama telah memindahkan sijil itu dan kuncinya keluar dari direktori tempat alat itu menjangka untuk menemuinya. Alat itu kemudian tidak dapat menemui apa yang diminta untuk dibatalkan, dan mesej ralat tidak selalu menjelaskan sebabnya dengan jelas.

cp /etc/easy-rsa/pki/index.txt /root/index.txt.$(date +%F-%H%M)
grep -c '^R' /etc/easy-rsa/pki/index.txt
easyrsa gen-crl

Terbitkan senarai baharu, betulkan pemilikannya, dan buat pelayan membacanya. Muat semula mencukupi pada kebanyakan pemasangan, tetapi pengesahan mesti datang daripada sambungan baharu, kerana sesi yang sedia ada tidak pernah menyemak semula apa-apa.

Periksa tuas mana yang layak untuk kes ini

Ajukan satu soalan yang menentukan seluruh buku panduan: adakah kunci persendirian masih hanya berada di tempat yang sepatutnya. Jika ya, pembunuhan sesi serta jeda yang didokumenkan menutup kes itu dan tidak meninggalkan rekod kekal. Jika tidak, satu-satunya jawapan selamat ialah kunci baharu dengan sijil lama dibiarkan dibatalkan.

Kemudian sahkan hasilnya dengan percubaan sambungan dan bukan dengan perbezaan konfigurasi. Perbezaan memberitahu anda apa yang anda maksudkan, dan sambungan memberitahu anda apa yang dikuatkuasakan oleh pelayan.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506

Apabila klien yang dipulihkan bersambung dan muncul dalam output status, suntingan rekod itu berjaya. Apabila klien yang dibatalkan ditolak dan log menyebut CRL, pembatalan itu berjaya. Apa-apa di antaranya ialah masalah kebenaran atau muat semula, dan ia wajar diperbaiki sebelum permintaan seterusnya tiba.

Artikel berkaitan