Satu proses penerbitan berhenti dengan entry 22: invalid expiry date, padahal permintaan yang ada di depan Anda sepenuhnya benar. Keluhan datang dari pengurai basis data CA, bukan dari CSR dan bukan dari klien VPN yang akhirnya akan menyajikan sertifikat. Perbedaan itulah yang menentukan semua langkah berikutnya: recordnya cacat, jadi perbaikannya ada di keadaan CA, bukan di permintaan atau konfigurasi peer. Perlakukan entri bernomor itu sebagai baris di index.txt, dan masalahnya menyusut menjadi pertanyaan data yang terbatas dengan jawaban yang dapat diperiksa.

Baca galat itu sebagai keluhan basis data

Setiap openssl ca pemanggilan menelusuri basis data teksnya sebelum menandatangani apa pun. Setiap baris memuat huruf status, cap waktu kedaluwarsa, cap waktu pencabutan opsional, nomor seri dalam heksadesimal, nama berkas, dan subjek. Bila satu bidang tidak dapat diurai, perintah melaporkan nomor baris dan berhenti alih-alih menebak sisa record.

Berhenti itu bersifat melindungi, bukan berlebihan. Record yang tidak dapat dibaca alat membuatnya tidak bisa memutuskan apakah subjek yang diminta sudah ada, apakah nomor seri sudah diberikan, atau apa yang harus dimuat CRL berikutnya. Melanjutkan melewati baris rusak justru akan menghasilkan ketidaksesuaian senyap yang muncul berbulan-bulan kemudian, biasanya saat pencabutan yang tidak dapat dijelaskan siapa pun. Baca pesannya sebagai keluhan tentang data, dan penyelidikan tetap di dalam direktori CA.

Salin keadaan CA sebelum menyentuh apa pun

Ambil snapshot seluruh direktori CA, bukan hanya berkas basis datanya. Indeks, berkas atributnya, berkas nomor seri dan nomor CRL, kunci privat, serta sertifikat yang diterbitkan semuanya ikut dalam operasi berikutnya, dan perbaikan yang memulihkan satu sementara melewatkan yang lain menciptakan insiden kedua. Gunakan rutinitas cadangan milik CA bila ada, dan hentikan penerbitan terjadwal selama pekerjaan berlangsung.

Catat build OpenSSL dan berkas konfigurasi yang benar-benar dimuat perintah yang gagal. Instalasi sering menyimpan lebih dari satu direktori CA, dan galat hanya bermakna terhadap basis data yang disebut konfigurasi terpilih.

Temukan entrinya dan dekode bidang tanggalnya

Nomor baris yang dilaporkan dihitung dari record pertama, jadi sed -n '22p' index.txt mendarat pada entri bermasalah begitu Anda memastikan tidak ada baris kosong atau komentar di atasnya. Cetak baris itu dengan pembatas yang terlihat, karena tab dan spasi di akhir umum terjadi dan tak terlihat di jendela editor biasa.

Bidang kedaluwarsa adalah cap waktu yang lebarnya bergantung pada tahun. Nilai sampai 2049 ditulis dalam UTCTime sebagai YYMMDDHHMMSSZ, sedangkan nilai setelahnya beralih ke GeneralizedTime dengan tahun empat digit. Record yang mencampur kedua bentuk, atau yang membawa tahun dua digit di tempat pengurai kini mengharapkan empat, gagal tepat di titik ini. Demikian pula bidang terpotong yang ditinggalkan penulisan yang terputus.

Bandingkan record dengan sertifikat yang dirujuknya, bukan dengan berkas CA lain. Sertifikat yang ditandatangani adalah otoritas atas apa yang seharusnya dikatakan masa berlaku, dan sertifikat itu sudah ada sebagai objek yang dapat diurai.

Perbaiki record berdasarkan sertifikat yang ditandatangani

Baca tanggal sebenarnya dengan openssl x509 -in issued.pem -noout -dates -serial -subject. Ubah notAfter ke lebar cap waktu yang ditulis build Anda untuk tahun itu, dan pastikan nomor seri cocok dengan entri yang akan Anda sunting sebelum mengubah satu karakter pun.

Sunting hanya bidang yang rusak, pertahankan huruf status dan nomor seri, dan biarkan sisa baris apa adanya. Bila record tidak dapat dicocokkan dengan sertifikat bertanda tangan mana pun, perlakukan sebagai entri liar dan pensiunkan lewat jalur pencabutan milik CA, bukan menghapus baris itu dengan tangan.

Jangan memperbaiki dengan memotong tanggal agar sesuai dugaan tentang tahun. Potongan dua karakter tidak portabel antar build, dan diam-diam mengubah masa berlaku yang dilaporkan basis data kepada pemeriksaan subjek duplikat dan CRL di masa depan. Bila nilai asli tidak dapat dipulihkan, terbitkan ulang dengan nomor seri baru dan catat mengapa yang lama ditinggalkan. Jejak audit adalah bagian dari perbaikan, bukan dokumen di sekitarnya.

Verifikasi penerbitan dan pembuatan CRL sebelum pergi

Jalankan satu penerbitan dengan konfigurasi yang sama dan pastikan selesai tanpa keluhan nomor baris. Lalu buat CRL dengan openssl ca -gencrl -config openssl.cnf dan periksa bahwa CRL itu dapat diurai, karena record yang rusak sering muncul di sana, bukan saat penandatanganan.

Periksa sertifikat baru dengan openssl x509 -noout -dates -serial dan bandingkan dengan baris yang baru saja ditulis CA. Pastikan huruf status dan tanggal kedaluwarsa sesuai dengan sertifikat, dan pastikan bahwa openssl verify -CAfile ca.pem issued.pem kembali tanpa galat. Setelah itu pulihkan penerbitan terjadwal dan awasi proses pertama, karena baris cacat kedua akan mengumumkan dirinya segera.

Artikel terkait