Ekspor reprepro tidak dapat menemukan kunci penandatanganan

13

Kami memiliki repositori debian pribadi yang dibuat tahun lalu oleh admin sistem sebelumnya. Paket-paket ditandatangani oleh kunci lama, 7610DDDE (yang harus saya batalkan), seperti yang ditunjukkan di sini untuk pengguna root pada server repo.

# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   1024D/2D230C5F 2006-01-03 [expired: 2007-02-07]
uid                  Debian Archive Automatic Signing Key (2006)  <[email protected]>

pub   1024D/7610DDDE 2006-03-03 [revoked: 2016-03-31]
uid                  Archive Maintainer <[email protected]>

pub   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <[email protected]>

Semua perintah di bawah adalah sebagai pengguna root. Saya memodifikasi file repositori / conf / distribusi untuk menggunakan sub kunci baru yang saya buat secara eksplisit untuk ditandatangani:

Architectures: i386 amd64 source
Codename: unstable
Components: main
...
SignWith: DD219672

Tetapi ketika saya menggunakan dput untuk memperbarui paket yang saya dapatkan

Could not find any key matching 'DD219672'!
ERROR: Could not finish exporting 'unstable'!
This means that from outside your repository will still look like before (and
should still work if this old state worked), but the changes intended with this
call will not be visible until you call export directly (via reprepro export)

Dan ketika saya menjalankan ekspor reprepro secara langsung saya mendapatkan:

# reprepro -V export unstable
Exporting unstable...
 generating main/Contents-i386...
 generating main/Contents-amd64...
Could not find any key matching 'DD219672'!
ERROR: Could not finish exporting 'unstable'!

Saya mencari di Google dan menemukan beberapa utas lama yang menunjukkan kemungkinan masalah dengan reprepro menemukan direktori gnupg yang tepat ... jadi saya mencoba ini dengan hasil yang sama di atas:

# GNUPGHOME=/root/.gnupg reprepro -V export unstable

Satu utas menyarankan pengujian kunci dengan menandatangani file dummy yang tampaknya berfungsi dengan baik ... setidaknya tidak ada kesalahan yang dilaporkan dan saya berakhir dengan file bla.gpg 576 byte setelah selesai.

# touch bla
# gpg -u DD219672 --sign bla

Halaman manual reprepro juga menyarankan "Jika ada masalah dengan penandatanganan, Anda dapat mencoba nilai gpg --list-secret-keys untuk melihat bagaimana gpg dapat menginterkrip nilai. Jika perintah itu tidak mencantumkan kunci atau beberapa, coba cari beberapa nilai lain (seperti keyid), gpg itu dapat lebih mudah dikaitkan dengan kunci unik. " Jadi saya memeriksanya juga dan mendapatkan:

# gpg --list-secret-keys DD219672
sec   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <[email protected]>

Dan akhirnya saya dapat menghubungi admin sistem yang pertama mengatur repro kami dan dia menyarankan mencoba kunci tanpa frasa sandi. Jadi saya membuat kunci penandatanganan baru, DD219672, menerbitkannya, pergi melalui langkah-langkah di atas lagi tetapi dengan hasil yang sama.

Hari ini, setelah lebih banyak membaca dan mempelajari halaman manual dan mencatat bahwa pgp-agent secara otomatis dimulai ketika saya menjalankan reprepro, saya memutuskan untuk mengejarnya sebentar.

Saya menambahkan gpg-agent.conf dengan

debug-level 7
log-file    /root/gpg.agent.log
debug-all

Dan saya bisa lihat di log bahwa gpg-agent tidak menemukan kunci

2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK Pleased to meet you, process 18903
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- RESET
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION ttyname=/dev/pts/0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION ttytype=xterm-256color
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- GETINFO version
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> D 2.1.11
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION allow-pinentry-notify
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION agent-awareness=2.1.0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- AGENT_ID
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> ERR 67109139 Unknown IPC command <GPG Agent>
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- HAVEKEY C2C5C59E5E90830F314ABB66997CCFAACC5DEA2F 416E8A33354912FF4843D52AAAD43FBF206252D9 8CE77065EA6F3818A4975072C8341F32CB7B0EF0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> ERR 67108881 No secret key <GPG Agent>
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- [eof]

Sejauh ini saya belum dapat menemukan di mana gpg-agent menemukan kunci yang tercantum di HAVKEY dan bagaimana mengarahkannya ke arah yang benar untuk menemukan kunci baru, DD219672, untuk menandatangani paket kami yang diperbarui.

Andy Dorman
sumber

Jawaban:

19

Saya memiliki masalah yang sama, dan setelah frustrasi akhirnya melacak apa yang sedang terjadi.

The repreproalat penggunaan gpgme, yang didasarkan pada gnupg2. Rilis terbaru dari itu mengubah cara cincin kunci rahasia ditangani: https://www.gnupg.org/faq/whats-new-in-2.1.html

gpg digunakan untuk menyimpan pasangan kunci publik dalam dua file: pubring.gpgdan secring.gpg... Dengan GnuPG 2.1 ini berubah ... Untuk memudahkan migrasi ke metode tanpa-pemisahan, gpg mendeteksi keberadaan a secring.gpgdan mengonversi kunci saat bepergian ke penyimpanan kunci gpg-agent (ini adalah private-keys-v1.ddirektori di bawah direktori home GnuPG ( ~/.gnupg)). Ini dilakukan hanya sekali dan yang sudah ada secring.gpgtidak lagi disentuh oleh gpg. Ini memungkinkan ko-eksistensi versi GnuPG yang lebih lama dengan GnuPG 2.1. Namun, perubahan apa pun pada kunci pribadi menggunakan gpg baru tidak akan muncul ketika menggunakan versi pra-2.1 GnuPG dan sebaliknya.

Jadi, jika Anda membuat kunci baru dengan gpg, gpg2 tidak akan melihatnya, dan sebaliknya.

Perbaikan cepat yang berhasil untuk saya:

gpg --export-secret-keys | gpg2 --import -

Dan jika Anda perlu ke arah lain, tentu saja:

gpg2 --export-secret-keys | gpg --import -

Tergantung pada pengaturan Anda, Anda mungkin juga ingin / perlu menambahkan --export-secret-subkeys

Setelah melakukan hal di atas, repreprobekerja dengan baik dengan kunci baru saya.

Cheetah
sumber
2
Kawan, kau pantas mendapatkan medali untuk melacaknya.
Andrew Schulman
2

Bagi saya masalahnya adalah saya membuat kunci sebagai pengguna dan menjalankan reprepro sebagai root .

Apa yang terjadi adalah bahwa kunci yang saya hasilkan "tanpa sudo" ditambahkan ke lokal saya pubring.gpg. Ketika saya menjalankan, sudo reprepro ...saya menjalankannya sebagai root dan karena itu mencoba untuk menemukan kunci di root pubring.gpgdan jelas tidak menemukannya.

Solusinya adalah menjalankan semua gpgperintah sebagai root (mis. sudo -iDan kemudian gpg --gen-key). Pastikan ketika Anda menjalankan sudo gpg --list-keysAnda melihat kunci dan garis yang Anda inginkan /root/.gnupg/pubring.gpg.

Semoga itu bisa membantu!

Dmytro Bogatov
sumber