Setelah menginstal OpenCA dan menyiapkan Otoritas Sertifikat (CA), saya menemukan kesalahan – “Verifikasi tanda tangan gagal pada kunci publik SPKAC ” saat menandatangani permintaan sertifikat entitas akhir pada mesin CA.
Error while issuing Certificate to David (filename: /home/openca/var/openca/tmp/4229D72DA1BA34B416B9.req). OpenCA::OpenSSL returns errocode 7731075 (OpenCA::OpenSSL->issueCert: OpenSSL fails (7777067). Using configuration from /home/openca/etc/openca/openssl/openssl/User.conf Check that the SPKAC request matches the signature Signature verification failed on SPKAC public key 140250398984096:error:0D06407A:asn1 encoding routines:a2d_ASN1_OBJECT:first num too large:a_object.c:108: 140250398984096:error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm:a_verify.c:206: error in ca ).
Saya menggunakan openca-base-1.5.0 dan openca-tools-1.3.0
Debug:
- Saya mengaktifkan opsi debug di OpenCA dan menemukan perintah OpenSSL yang menandatangani sertifikat pengguna. Di bawah ini adalah cuplikan dari debug.
OpenCA::OpenSSL->_execute_command: ca -batch -config /home/openca/etc/openca/openssl/openssl/User.conf -keyfile /home/openca/var/openca/crypto/keys/cakey.pem -passin env:pwd -extfile /home/openca/var/openca/tmp/User.ext -preserveDN -subj "/O=OpenCA Labs/OU=Users/CN=David" -spkac /home/openca/var/openca/tmp/4229D72DA1BA34B416B9.req
Selengkapnya dari debug…
OpenCA::OpenSSL->setError: errno: 7731075 OpenCA::OpenSSL->setError: errval: OpenCA::OpenSSL->issueCert: OpenSSL fails (7777067). Using configuration from /home/openca/etc/openca/openssl/openssl/User.conf Check that the SPKAC request matches the signature signature verification failed on SPKAC public key 140030475425696:error:0D06407A:asn1 encoding routines:a2d_ASN1_OBJECT:first num too large:a_object.c:108: 140030475425696:error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm:a_verify.c:206: error in ca
Kesalahan “verifikasi tanda tangan gagal pada kunci publik SPKAC ” dengan jelas mengatakan bahwa masalahnya adalah saat menandatangani kunci publik SPKAC – Permintaan dibuat di jendela browser pengguna seperti yang ditunjukkan di bawah ini:
Permintaan yang dihasilkan browser terdiri dari kunci publik dan tanda tangan SPKAC. SPKAC mungkin menggunakan MD5
dalam tanda tangannya. Itu tidak aman dan OpenSSL tidak memverifikasi tanda tangan yang menggunakan MD5
secara default.
Jadi bagaimana kita memberitahu OpenSSL untuk menerima permintaan yang menggunakan MD5? Begini caranya.
Cara memperbaiki Verifikasi tanda tangan gagal pada kunci publik SPKAC
Setel variabel lingkungan OPENSSL_ENABLE_MD5_VERIFY
sebagai solusi untuk mengizinkan OpenSSL menandatangani permintaan yang menggunakan MD5. Karena OpenCA menggunakan sesi, Anda tidak bisa hanya mengatur variabel lingkungan pada baris perintah. Anda perlu mengaturnya secara terprogram, sehingga setiap kali OpenCA menggunakan perintah OpenSSL untuk menandatangani, itu harus disetel.
Jadi, atur variabel lingkungan OPENSSL_ENABLE_MD5_VERIFY
di /home/openca/lib/openca/perl_modules/perl5/x86_64-linux-thread-multi/OpenCA/OpenSSL.pm
berkas:
Cari Baris:# menjalankan perintah OpenSSL
Di bawah ini adalah kode tempat penandatanganan sertifikat.
$self->_debug ("issueCert: openssl=$command"); $ENV{'pwd'} = "$passwd"; $ret = $self->_execute_command (COMMAND => $command, KEY_USAGE => $engine); delete ($ENV{'pwd'}); unlink ($reqfile) if ($reqdata); if( not $ret ) { $self->setError (7731075, $self->{gettext} ("OpenCA::OpenSSL->issueCert: OpenSSL fails (__ERRNO__). __ERRVAL__", "__ERRNO__", $self->errno, "__ERRVAL__", $self->errval)); return undef; }
Sebelum mengeksekusi kode di atas, Anda perlu mengatur Variabel lingkungan seperti yang ditunjukkan di bawah ini:
$ENV{OPENSSL_ENABLE_MD5_VERIFY} = 0;
Sekarang restart daemon OpenCA dan tandatangani sertifikat pengguna Anda. Seharusnya berhasil.
Melalui Bugzilla