Pesannya mengatakan bahwa OpenVPN tidak dapat memuat sertifikat sebaris, sementara nama berkas yang tersimpan di kepala Anda mengatakan sebaliknya. Apa yang diterima pengurai lebih penting daripada apa yang ada di sistem berkas, karena direktif cert menerima dua jenis nilai yang sepenuhnya berbeda. Yang satu adalah jalur yang dibukanya; yang lain adalah teks PEM yang datang di dalam konfigurasi. Sampai Anda tahu bentuk mana yang diterima klien yang berjalan, setiap perbaikan hanyalah dugaan.

Dua bentuk penyimpanan, satu direktif

Direktif cert, key, dan ca masing-masing menerima jalur atau blok sebaris. Ketika nilainya jalur, OpenVPN membuka berkas itu dan membaca objeknya dari disk. Ketika konfigurasi memuat blok yang dibatasi tag cert, direktif yang sama malah memakai isi di antara tag tersebut, dan tidak ada berkas terpisah yang terlibat.

Kedua bentuk menghasilkan jenis objek yang sama pada akhirnya, karena itu penerapan yang berfungsi dapat berpindah di antara keduanya tanpa perubahan lain. Profil yang membawa sertifikat klien dan kunci privat tersemat bersifat mandiri, dan menyalinnya ke mesin lain berfungsi tanpa menyalin direktori sertifikat juga.

Sebaliknya tidak berlaku. Meletakkan client.crt di samping profil yang menyematkan datanya sendiri tidak mengubah apa pun, karena tidak ada yang di konfigurasi merujuk berkas itu. Inilah alasan paling umum sebuah berkas yang jelas ada tampak diabaikan.

Bagaimana blok sebaris berubah menjadi objek

Isi sebaris diekstrak dari konfigurasi dan diserahkan ke pengurai PEM sebagai teks. Pengurai itu mengharapkan batas yang biasa: baris BEGIN, muatan base64, dan baris END yang cocok. Jika blok terpotong oleh salinan yang gagal, dibungkus HTML oleh halaman unduhan, atau dibuka di editor yang menormalkan tanda hubung, pengurai gagal pada isi yang tampak ada.

<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

Itu juga sebabnya rumusan galatnya menyesatkan. Kata sebaris menjelaskan di mana pemuat melihat, bukan apa yang ditemukannya di sana. Berkas yang disebut dalam konfigurasi dan objek yang tersemat di dalamnya dapat menghasilkan keluhan yang sama ketika byte dasarnya tidak dapat dipakai.

Periksa bentuk mana yang benar-benar dipakai profil yang dimuat, bukan berkas mana yang kebetulan dibuka editor Anda:

grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn

Bagaimana rujukan jalur diselesaikan

Nilai jalur dibuka relatif terhadap direktori kerja klien, bukan terhadap direktori yang memuat konfigurasi. Di bawah systemd direktori kerja itu adalah apa yang ditetapkan unit, dan jalannya interaktif dari shell Anda mewarisi sesuatu yang sama sekali lain. Karena itu berkas konfigurasi yang sama bisa berfungsi saat Anda mengujinya dengan tangan dan gagal sebagai layanan.

Jalur relatif mewarisi ambiguitas yang sama. Ketika Anda melihat nama berkas telanjang, tanyakan apa direktori kerja proses saat ini di produksi alih-alih menganggapnya cocok dengan terminal Anda.

Untuk sertifikat yang disimpan terpisah, penguraian luring mengonfirmasi objek sebelum Anda men-debug apa pun di atasnya:

openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check

Perintah itu membuktikan berkas dapat dibaca dan sah secara struktur. Itu tidak membuktikan bahwa rekan mempercayai penerbit, bahwa sertifikat masih di dalam jendela masa berlakunya, atau bahwa kunci itu miliknya.

Apa yang bisa dan tidak bisa dikatakan galat pengurai

Kegagalan penguraian melokalkan masalah ke satu masukan dan satu tahap. Itu tidak memberi tahu bentuk penyimpanan mana yang dipakai klien, dan tidak memberi tahu apakah objeknya akan diterima. Itu pertanyaan terpisah dengan bukti terpisah.

Setelah penguraian berhasil, kegagalan berikutnya milik tahap yang lebih akhir. Penolakan kepercayaan, ketidakcocokan tujuan, atau ketidakcocokan kunci dilaporkan oleh rekan atau oleh lapisan TLS, bukan oleh pemuat. Mengganti berkas yang sama berulang kali tidak akan menggeser galat itu.

Jauhkan bagian sensitif dari laporan publik selama Anda menyelidiki. Bagikan nama direktif, teks galat, dan struktur blok, dengan materi kunci dan muatan pengenal apa pun dihapus. Manual openvpn(8) mendokumentasikan kedua bentuk direktif berkas dan perilaku direktori kerja di baliknya.

Artikel terkait