Sertifikat VPN yang ditandatangani sendiri: apa artinya dan apa yang dipercayainya
Sertifikat VPN yang ditandatangani sendiri tetap mengenkripsi lalu lintas. Yang berubah adalah kepada siapa Anda mengatakan untuk mempercayainya, penyimpanan mana yang menerima kepercayaan itu, dan pemeriksaan mana yang tersisa.
Dua keyakinan paling banyak menimbulkan kerusakan di sini: bahwa sertifikat VPN yang ditandatangani sendiri berarti terowongan tidak terenkripsi, dan bahwa memasang apa pun yang diminta klien VPN hanya memengaruhi VPN. Keduanya tidak bertahan saat bersentuhan dengan penerapan nyata. Sertifikat yang ditandatangani sendiri menggambarkan hubungan tanda tangan, bukan putusan keamanan, dan jangkauan kepercayaan yang Anda tambahkan bergantung pada penyimpanan mana ia mendarat. Saya pernah melihat meja bantuan mengimpor akar penyedia ke mesin Windows untuk membungkam satu peringatan, lalu menghabiskan sepanjang sore menjelaskan mengapa peramban berhenti mengeluh tentang portal yang tidak terkait. Dua bagian pertanyaan ini saling terkait, jadi perlakukan sebagai satu.
Sertifikat bukan penyimpanan kepercayaan
Berkas yang disajikan server membawa kunci publik, nama subjek, nama penerbit, tanggal berlaku, dan ekstensi. Ditandatangani sendiri berarti subjek dan penerbit adalah entitas yang sama dan tanda tangan diverifikasi dengan kunci sertifikat itu sendiri. Tidak ada dalam definisi itu yang mengatakan koneksi lemah, dan tidak ada yang mengatakan klien akan menerimanya.
Penerimaan datang dari tempat lain: berkas CA yang Anda arahkan ke klien, sidik jari yang Anda bandingkan dengan tangan, atau akar yang sudah berada di penyimpanan yang dibaca klien. Penerapan bisa sangat sehat sementara sertifikatnya akan gagal di setiap uji publik. openssl verify terhadap bundel sistem akan melaporkan penerbit tidak dikenal, dan laporan itu benar, bukan kesalahan.
Opsi ca OpenVPN adalah kasus paling jelas dari kepercayaan terbatas aplikasi. Berkas itu menamai jangkar yang akan diterima klien, dan mungkin berisi satu CA privat atau, dalam penerapan kecil, sertifikat yang ditandatangani sendiri milik server. Versi 2.6 juga menerima --peer-fingerprint untuk menyematkan sidik jari SHA-256 alih-alih mendistribusikan berkas CA. WireGuard bahkan lebih jauh: tidak ada sertifikat sama sekali, hanya kunci publik statis per rekan, jadi pertanyaan tanda tangan sendiri tidak berlaku padanya.
Di mana Anda memasang kepercayaan menentukan siapa yang mewarisinya
Letakkan sertifikat yang sama di tiga tempat dan Anda mendapat tiga radius ledakan berbeda. Bundel yang hanya dibaca klien VPN memengaruhi klien itu. Akar di penyimpanan sistem operasi memengaruhi setiap program yang berkonsultasi dengan penyimpanan itu. Peramban dengan basis data kepercayaan sendiri dapat mengabaikan keduanya, itulah sebabnya peringatan bisa bertahan setelah impor yang tampak berhasil.
Di Debian atau Ubuntu, menaruh berkas di /usr/local/share/ca-certificates/ dan menjalankan update-ca-certificates mengubah bundel seluruh sistem. Di Windows, certutil -addstore -f Root menulis ke penyimpanan mesin dan membutuhkan prompt yang ditinggikan, sedangkan menambahkan -user menargetkan penyimpanan pengguna saat ini; keduanya tidak dapat dipertukarkan. Firefox menyimpan basis data NSS sendiri, jadi impor tingkat OS mungkin tidak pernah muncul di sana.
Cakupan penting karena apa yang dapat dilakukan otoritas. CA penerbit dapat menandatangani nama yang tidak ada hubungannya, jadi apa pun yang mempercayai penyimpanan itu akan menerima tanda tangan tersebut. Satu lembar yang disematkan tidak dapat melakukannya; ia mengautentikasi tepat satu identitas rekan. Jika tujuannya membuat satu VPN terhubung, CA terbatas aplikasi atau lembar yang disematkan mencapainya, sedangkan akar seluruh mesin adalah konsesi yang jauh lebih besar daripada yang dituntut gejala.
Anda masih mengenkripsi tanpa CA publik
Jabat tangan TLS menurunkan kunci sesi apakah sertifikat rekan berantai ke sesuatu yang sudah Anda percayai atau tidak. Ditandatangani sendiri tidak berarti teks biasa, dan tidak berarti lalu lintas dapat dibaca saat transit. Artinya klien tidak punya alasan apriori untuk percaya bahwa kunci itu milik server yang dimintanya.
Di celah itulah serangan nyata hidup. Klien yang dikonfigurasi menerima sertifikat apa pun, entah melalui pengaturan verifikasi yang dimatikan atau tombol percaya-begitu-saja yang diklik sekali dan dilupakan, akan dengan senang hati mengenkripsi ke siapa pun yang menjawab. Penyadapan terjadi pada langkah autentikasi, sebelum data aplikasi bergerak. Enkripsi tanpa pemeriksaan identitas menjaga pengamat pasif tetap di luar dan tidak banyak melakukan hal lain.
Mempercayai penerbit tidak melewati pemeriksaan nama
Validasi rantai, pencocokan nama, dan tujuan sertifikat adalah keputusan terpisah. Rantai bisa valid sementara namanya salah, dan nama bisa cocok sementara sertifikat diterbitkan untuk peran lain. RFC 5280 mendefinisikan bidang yang membawa batasan itu, dan seberapa ketat klien menegakkannya adalah urusan tiap aplikasi.
OpenVPN membuat pemisahan itu terlihat. verify-x509-name menyematkan subjek yang diharapkan melalui pencocokan name, name-prefix, atau subject. remote-cert-tls server mengharuskan sertifikat rekan dapat digunakan sebagai sertifikat server, yang menolak sertifikat khusus klien bahkan ketika penerbitnya dipercaya. Tidak ada dari kedua pengaturan itu yang digantikan dengan mengirim berkas CA.
Periksa sertifikat sebelum Anda memutuskan apa pun:
openssl x509 -in server.crt -noout -subject -issuer -dates -ext subjectAltNamemenunjukkan siapa yang menerbitkannya, untuk nama apa, dan sampai kapan.openssl verify -CAfile ca.crt server.crtmemeriksa apakah rantai yang hendak Anda kirim benar-benar memvalidasi lembar itu.openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -CAfile ca.crt -verify_return_errorbekerja untuk titik akhir TLS seperti portal web; protokol OpenVPN pada 1194 bukan aliran TLS biasa, jadi uji itu tidak berlaku di sana.
Sertifikat dengan tanggal kedaluwarsa, tanpa subjectAltName untuk nama yang Anda hubungi, atau tanpa penggunaan serverAuth gagal terlepas dari seberapa hati-hati jangkar dipasang.
Lima pemeriksaan sebelum Anda menerimanya
Bandingkan sidik jari melalui saluran yang bukan koneksi yang Anda coba perbaiki: konsol, pemasang yang sudah Anda miliki, berkas konfigurasi yang ditandatangani. openssl x509 -in server.crt -noout -fingerprint -sha256 di server dan nilai yang sama di log klien cukup untuk mengetahui bahwa Anda melihat satu objek.
Selanjutnya, putuskan apa yang Anda pasang: satu lembar, atau otoritas yang dapat mencetak lebih banyak. Lalu putuskan ke mana ia pergi, dan sebutkan aplikasi yang membaca penyimpanan itu. Tuliskan jalur penghapusan selagi Anda masih mengingatnya, karena percaya-dan-lanjut adalah cara impor sementara menjadi permanen.
Terakhir, rencanakan perubahannya. Sertifikat atau sidik jari yang disematkan harus diperbarui melalui saluran tepercaya yang sama saat sertifikat berputar, dan CA privat memiliki siklus hidup penerbitan dan pencabutannya sendiri. Jika kunci privat bocor, mempercayai kembali salinan sertifikat yang sama tidak memperbaiki apa pun; identitasnya harus diganti.
Jika peringatan bertahan dari kelima pemeriksaan, pertanyaan yang berguna bukan tombol mana yang membungkamnya, melainkan penyimpanan mana yang sebenarnya dibaca klien dan dari mana akar itu berasal. Jawab itu, dan impor yang akan Anda lakukan menjadi keputusan alih-alih refleks.