Huruf-huruf dalam penjelasan RSA menamai bidang di dalam satu objek, bukan berkas yang diberikan alat PKI. Berkas kunci privat memuat struktur yang bidang awalnya publik dan bidang berikutnya tidak boleh meninggalkan mesin yang mengakhiri terowongan. Di antara kedua fakta itu terdapat sebagian besar pertanyaan praktis tentang berkas mana yang menjawab pertanyaan mana. Panduan ini membaca strukturnya lebih dahulu, lalu perintah yang memeriksanya tanpa menumpahkannya.

Pastikan kuncinya RSA sebelum mencari bilangan prima

Sertifikat membuktikan bahwa suatu kunci ada dan telah ditandatangani; sertifikat tidak membuktikan bahwa kuncinya RSA. Sistem dapat dibangun di atas kurva eliptik atau Ed25519, dan tata letak direktori yang sama melayani semuanya. Periksa algoritmanya sebelum mulai mencari faktor prima yang tidak pernah ada.

Ketiga perintah hanya-baca ini menjawab pertanyaan itu dan mencatat versi alat.

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

Versi penting karena nama opsi berpindah antar rilis utama. Pada keluaran sertifikat, temukan baris algoritma kunci publik dan ukuran kunci; pada keluaran kunci, kunci RSA mencetak modulus dan eksponen publik. Kunci kurva eliptik mencetak kurva bernama sebagai gantinya, dan tidak ada pencarian yang akan menghasilkan n atau q darinya.

Baca strukturnya, bukan base64

PEM adalah base64 yang dibungkus baris tajuk, dan dekodenya menghasilkan DER, yaitu struktur berserial dan bukan satu bilangan bulat raksasa. Kunci privat RSA berpindah dalam dua wadah umum, PKCS#1 dan PKCS#8, dan keduanya bermuara pada himpunan angka yang sama.

Pada kasus dua bilangan prima, struktur privat membawa sembilan bidang: versi, modulus n, eksponen publik e, eksponen privat d, bilangan prima p dan q, dua eksponen CRT dan satu koefisien CRT. RFC 8017 bagian A.1 mendefinisikan komponen itu dan tata letak ASN.1, dan juga mengizinkan lebih dari dua bilangan prima, karena itu pengurai umum dapat mencetak entri prima tambahan. Perhatikan urutannya, sebab itu menjelaskan kesalahan yang sering terjadi: separuh publik disimpan di dalam berkas privat, jadi adanya bidang publik tidak membuat berkas itu aman untuk dibagikan. Semua yang setelahnya adalah materi yang harus tetap di host.

Pengodean menambah lapisan yang mudah dikacaukan dengan isi. openssl asn1parse menggambar struktur sebagai pohon sehingga urutan bidang menjadi terlihat, dan ia tidak mendekripsi apa pun dan tidak mengatakan apakah kuncinya bisa dipakai.

Pasangkan sertifikat dengan kunci tanpa mencetak kuncinya

Pertanyaan berikutnya biasanya apakah sertifikat dan kunci saling memiliki. Membandingkan modulus menjawabnya, tetapi juga menyalin materi yang dekat dengan privat ke transkrip terminal yang bisa berakhir di tiket. Membandingkan separuh publik menjawab pertanyaan yang sama tanpa sesuatu yang sensitif di layar.

openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH

Berkas yang sama berarti sertifikat membawa separuh publik kunci itu, dan perbedaan berarti Anda memegang pasangan yang salah. Ketidakcocokan itu adalah penyebab paling umum terowongan yang bernegosiasi dengan gembira lalu menolak autentikasi. Setelah itu hapus dua berkas sementara; isinya tidak rahasia, tetapi direktori kerja yang bersih lebih mudah dipikirkan di tengah insiden.

Ketahui apa yang bukan berkas tetangga

Sertifikat bukan kunci publik terenkripsi yang dibuka pihak lain dengan sertifikat CA; ia adalah ikatan bertanda tangan antara kunci publik dan data identitas. Kunci penandatangan privat CA tetap terpisah dari sertifikatnya sendiri dan dari setiap kunci klien. Permintaan juga bukan sertifikat: ia membawa informasi yang diminta dan kunci publik dengan tanda tangan atas permintaan, sehingga menjadi masukan pendaftaran, bukan bukti hak.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

Dua dari entri itu cukup sering dikacaukan dengan parameter RSA sehingga perlu disebut dua kali. Berkas parameter Diffie-Hellman memuat parameter grup untuk pembentukan kunci dan tidak memuat bilangan prima RSA, meskipun juga tercetak sebagai bilangan prima besar. Daftar pencabutan menerbitkan status sertifikat dan bukan tempat eksponen privat bisa bersembunyi.

Karena itu setiap baris inventaris sebaiknya mencatat empat hal: jenis objek, pemilik, tujuan dan apakah materi privat disertakan. Kolom terakhir menentukan ke mana berkas boleh disalin, dan itulah yang dilewatkan orang.

Catat pemasangannya, lalu verifikasi jabat tangan

Sebelum mengubah apa pun, simpan keluaran verifikasi dengan tanggal dan versi OpenSSL. Rotasi berikutnya kemudian dapat dibandingkan dengan bukti, bukan dengan ingatan.

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Setelah perbandingan kunci publik, jalankan jalur yang memakai pasangan itu: naikkan terowongan, pastikan sertifikat disajikan dan diterima, lalu periksa identitas mana yang dicatat gateway. Jika kunci dan sertifikat cocok tetapi autentikasi tetap gagal, kesalahannya ada pada kepercayaan, pemetaan identitas atau kebijakan akses, bukan pada pasangan.

Untuk pengembalian, simpan kunci dan sertifikat sebelumnya di direktori bertanggal dan pulihkan keduanya bersama, jangan pernah salah satu. Kunci tanpa sertifikatnya dan sertifikat tanpa kuncinya gagal dengan cara yang sama dari luar, yang membuat pasangan yang pulih separuh mahal untuk diurai pada pukul dua pagi.

Artikel terkait