Saya mencoba memverifikasi tanda tangan sebuah paket di situs web paket FreeBSD
wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz
Hal ini memberikan tiga file: digests
, digests.pub
digests.sig
saya menganggap bahwa digests.sig
adalah tanda tangan untuk file digests
dengan digests.pub
sebagai kunci publik. Tetapi saya mencoba mengkonfirmasi bahwa:
openssl dgst -verify digests.pub -signature digests.sig digests
dan menerima pesannya
Verification Failure
Saya berasumsi saya memiliki sesuatu yang salah - adakah yang bisa memberi tahu saya apa yang saya lewatkan?
EDIT: Berdasarkan perburuan melalui kode sumber, saya pikir fungsi penting dapat ditemukan di sini , yang disebut rsa_verify_cert_cb
panggilan RSA_verify
dari perpustakaan openssl. Tapi saya belum menemukan apa yang dimasukkan ke dalamnya, atau apakah mungkin untuk memanggil fungsi itu menggunakan openssl
alat baris perintah.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
tampaknya tidak cocok dengan.sha256sum digests
Jawaban:
Karena tidak ada "Cara Melakukan" di Internet untuk verifikasi paket FreeBSD manual, inilah yang saya ketahui.
Triknya adalah string oktet dalam
openssl rsautl
output sebenarnya adalah hash dari string yang merupakan hash SHA256 dari sebuah file.Misalnya, unduh saat ini
http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
, ekstrak dan lakukan yang berikut:Metode 1 (menggunakan one-liner
openssl dgst
)Penting di sini untuk melakukan
tr -d '\n'
drop baris baru dari input standar, sehingga tidak termasuk dalam input string untukopenssl dgst
.Perintah ini akan ditampilkan
Verified OK
.Metode 2 (perbandingan visual string oktet dari file .sig dengan hash yang dihasilkan secara manual)
Gunakan utilitas OpenSSL untuk membuang konten dari digests.sig
Di sini Anda dapat melihat bahwa objek yang disematkan adalah hash SHA256 dan nilainya
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.Sekarang hitung SHA256 file
digests
:echo
perintah dan bandingkan dengan nilai yang dikembalikan olehopenssl rsautl
:Perhatikan bagaimana nilai dari langkah 3. cocok dengan nilai dari langkah 1., jadi file
digests
tersebut valid.sumber
Pesan itu mengatakan bahwa kunci publik tidak cocok dengan file yang Anda unduh. Menurut halaman manual untuk dgst -verifikasi nama file verifikasi tanda tangan menggunakan kunci publik di "nama file". Outputnya adalah "Verifikasi OK" atau "Kegagalan Verifikasi" Penyebab yang paling mungkin adalah file rusak selama unduhan. Saya akan mencoba untuk mengunduhnya lagi dan jika terus gagal memeriksa maka itu pertanda tautan unduhan yang dikompromikan (tetapi karena itu dari situs freebsd saya menduga itu hanyalah kesalahan pengunduhan. Bahkan kemudian saya akan memverifikasi yang baru unduh hanya untuk berada di sisi aman). Jika Anda memiliki koneksi internet yang lambat / tidak dapat diandalkan, mungkin perlu beberapa kali mencoba untuk mengunduhnya dengan benar. Jika Anda perlu memeriksa info tentang perintah itu '
sumber