Sijil VPN yang ditandatangani sendiri: apa maksudnya dan apa yang dipercayainya
Sijil VPN yang ditandatangani sendiri masih menyulitkan trafik. Apa yang berubah ialah kepada siapa anda memberitahu untuk mempercayainya, stor mana yang menerima kepercayaan itu dan pemeriksaan mana yang kekal.
Dua kepercayaan paling banyak mendatangkan kerosakan di sini: bahawa sijil VPN yang ditandatangani sendiri bermakna terowong tidak disulitkan, dan bahawa memasang apa sahaja yang diminta klien VPN hanya menjejaskan VPN. Kedua-duanya tidak bertahan apabila bersentuhan dengan penggunaan sebenar. Sijil yang ditandatangani sendiri menerangkan hubungan tandatangan, bukan keputusan keselamatan, dan jangkauan kepercayaan yang anda tambah bergantung pada stor mana ia mendarat. Saya pernah melihat meja bantuan mengimport akar pembekal ke dalam mesin Windows untuk menyenyapkan satu amaran, kemudian menghabiskan sepanjang petang menjelaskan mengapa pelayar berhenti mengadu tentang portal yang tidak berkaitan. Kedua-dua separuh soalan ini saling berkaitan, jadi anggap ia sebagai satu.
Sijil bukan stor kepercayaan
Fail yang dikemukakan pelayan membawa kunci awam, nama subjek, nama pengeluar, tarikh sah dan sambungan. Ditandatangani sendiri bermakna subjek dan pengeluar ialah entiti yang sama dan tandatangan disahkan dengan kunci sijil itu sendiri. Tiada apa-apa dalam takrif itu yang mengatakan sambungan lemah, dan tiada apa-apa yang mengatakan klien akan menerimanya.
Penerimaan datang dari tempat lain: fail CA yang anda halakan klien kepadanya, cap jari yang anda bandingkan secara manual, atau akar yang sudah berada dalam stor yang dibaca klien. Penggunaan boleh menjadi sangat sihat sementara sijilnya akan gagal dalam setiap ujian awam. openssl verify terhadap himpunan sistem akan melaporkan pengeluar tidak dikenali, dan laporan itu betul, bukan kecacatan.
Pilihan ca OpenVPN ialah kes kepercayaan terbatas aplikasi yang paling jelas. Fail itu menamakan sauh yang akan diterima klien, dan ia mungkin mengandungi satu CA peribadi atau, dalam penggunaan kecil, sijil yang ditandatangani sendiri oleh pelayan itu sendiri. Versi 2.6 juga menerima --peer-fingerprint untuk menyematkan cap jari SHA-256 dan bukannya mengedarkan fail CA. WireGuard lebih jauh lagi: ia tidak mempunyai sijil sama sekali, hanya kunci awam statik bagi setiap rakan, jadi soalan tandatangan sendiri tidak terpakai padanya.
Di mana anda memasang kepercayaan menentukan siapa yang mewarisinya
Letakkan sijil yang sama di tiga tempat dan anda mendapat tiga jejari letupan berbeza. Himpunan yang hanya dibaca oleh klien VPN menjejaskan klien itu. Akar dalam stor sistem pengendalian menjejaskan setiap program yang merujuk stor itu. Pelayar dengan pangkalan data kepercayaan sendiri mungkin mengabaikan kedua-duanya, dan sebab itulah amaran boleh bertahan selepas import yang kelihatan berjaya.
Pada Debian atau Ubuntu, menjatuhkan fail ke dalam /usr/local/share/ca-certificates/ dan menjalankan update-ca-certificates mengubah himpunan seluruh sistem. Pada Windows, certutil -addstore -f Root menulis ke stor mesin dan memerlukan gesaan yang dinaikkan, manakala menambah -user menyasarkan stor pengguna semasa pula; kedua-duanya tidak boleh ditukar ganti. Firefox menyimpan pangkalan data NSS sendiri, jadi import pada peringkat OS mungkin tidak pernah muncul di sana.
Skop penting kerana apa yang boleh dilakukan oleh pihak berkuasa. CA pengeluar boleh menandatangani nama yang tiada kaitan dengannya, jadi apa sahaja yang mempercayai stor itu akan menerima tandatangan tersebut. Satu daun yang disematkan tidak boleh berbuat demikian; ia mengesahkan tepat satu identiti rakan. Jika matlamatnya ialah menyambungkan satu VPN, CA terbatas aplikasi atau daun yang disematkan mencapainya, manakala akar seluruh mesin ialah konsesi yang jauh lebih besar daripada yang diperlukan oleh simptom.
Anda masih menyulitkan tanpa CA awam
Jabat tangan TLS memperoleh kunci sesi sama ada sijil rakan berantai kepada sesuatu yang anda sudah percayai atau tidak. Ditandatangani sendiri tidak bermakna teks biasa, dan tidak bermakna trafik boleh dibaca semasa dalam penerbangan. Ia bermakna klien tiada sebab priori untuk percaya kunci itu milik pelayan yang dimintanya.
Dalam jurang itulah serangan sebenar tinggal. Klien yang dikonfigurasikan untuk menerima mana-mana sijil, sama ada melalui tetapan pengesahan yang dilumpuhkan atau butang percaya-juga yang ditekan sekali dan dilupakan, akan menyulitkan dengan gembira kepada sesiapa yang menjawab. Pemintasan berlaku pada langkah pengesahan, sebelum data aplikasi bergerak. Penyulitan tanpa pemeriksaan identiti menghalang pemerhati pasif di luar dan tidak berbuat banyak lagi.
Mempercayai pengeluar tidak melangkau pemeriksaan nama
Pengesahan rantai, pemadanan nama dan tujuan sijil ialah keputusan berasingan. Rantai boleh sah manakala namanya salah, dan nama boleh sepadan manakala sijil dikeluarkan untuk peranan lain. RFC 5280 mentakrifkan medan yang membawa kekangan itu, dan sejauh mana ketat klien menguatkuasakannya ialah urusan setiap aplikasi.
OpenVPN menjadikan pemisahan itu kelihatan. verify-x509-name menyematkan subjek yang dijangka melalui pemadanan name, name-prefix atau subject. remote-cert-tls server memerlukan sijil rakan boleh digunakan sebagai sijil pelayan, yang menolak sijil khusus klien walaupun pengeluarnya dipercayai. Kedua-dua tetapan tidak digantikan dengan menghantar fail CA.
Periksa sijil sebelum anda memutuskan apa-apa:
openssl x509 -in server.crt -noout -subject -issuer -dates -ext subjectAltNamemenunjukkan siapa yang mengeluarkannya, untuk nama apa dan sehingga bila.openssl verify -CAfile ca.crt server.crtmemeriksa sama ada rantai yang hendak anda hantar benar-benar mengesahkan daun itu.openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -CAfile ca.crt -verify_return_errorberfungsi untuk titik akhir TLS seperti portal web; protokol OpenVPN pada 1194 bukan aliran TLS biasa, jadi ujian itu tidak terpakai di sana.
Sijil dengan tarikh tamat tempoh, tiada subjectAltName untuk nama yang anda sambungkan, atau tiada penggunaan serverAuth gagal tanpa mengira betapa berhati-hatinya sauh itu dipasang.
Lima pemeriksaan sebelum anda menerimanya
Bandingkan cap jari melalui saluran yang bukan sambungan yang anda cuba baiki: konsol, pemasang yang sudah anda miliki, fail konfigurasi yang ditandatangani. openssl x509 -in server.crt -noout -fingerprint -sha256 pada pelayan dan nilai yang sama dalam log klien cukup untuk mengetahui anda melihat satu objek.
Seterusnya, putuskan apa yang anda pasang: satu daun, atau pihak berkuasa yang boleh menempa lebih banyak. Kemudian putuskan ke mana ia pergi, dan namakan aplikasi yang membaca stor itu. Tuliskan laluan penyingkiran selagi anda masih mengingatnya, kerana percaya-dan-teruskan ialah cara import sementara menjadi kekal.
Akhir sekali, rancang perubahan itu. Sijil atau cap jari yang disematkan mesti dikemas kini melalui saluran dipercayai yang sama apabila sijil berputar, dan CA peribadi mempunyai kitaran hayat pengeluaran dan pembatalannya sendiri. Jika kunci peribadi bocor, mempercayai semula salinan sijil yang sama tidak membaiki apa-apa; identiti mesti diganti.
Jika amaran bertahan melalui kelima-lima pemeriksaan, soalan yang berguna bukan butang mana yang menyenyapkannya tetapi stor mana yang sebenarnya dibaca klien dan dari mana akar itu datang. Jawab itu, dan import yang anda akan lakukan menjadi keputusan dan bukannya refleks.