Xuất khẩu reprepro không thể tìm thấy khóa ký


13

Chúng tôi có một kho lưu trữ debian riêng được thiết lập từ nhiều năm trước bởi một quản trị viên hệ thống trước đó. Các gói đã được ký bởi khóa cũ hơn, 7610DDDE (mà tôi phải thu hồi), như được hiển thị ở đây cho người dùng root trên máy chủ 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)  <ftpmaster@debian.org>

pub   1024D/7610DDDE 2006-03-03 [revoked: 2016-03-31]
uid                  Archive Maintainer <root@xxxxxxxxxx.com>

pub   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <root@xxxxxxxxxx.com>

Tất cả các lệnh dưới đây là người dùng root. Tôi đã sửa đổi tệp kho lưu trữ / conf / phân phối để sử dụng khóa phụ mới mà tôi đã tạo một cách rõ ràng để ký:

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

Nhưng khi tôi sử dụng dput để cập nhật một gói tôi nhận được

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)

Và khi tôi chạy reprepro xuất trực tiếp, tôi nhận được:

# 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'!

Tôi đã tìm kiếm và tìm thấy một vài chủ đề cũ chỉ ra một vấn đề có thể xảy ra với reprepro khi tìm thư mục gnupg thích hợp ... vì vậy tôi đã thử điều này với kết quả tương tự ở trên:

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

Một luồng đề nghị kiểm tra khóa bằng cách ký một tệp giả có vẻ hoạt động tốt ... ít nhất là nó báo cáo không có lỗi và tôi đã kết thúc với tệp bla.gpg 576 byte sau khi hoàn thành.

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

Trang man reprepro cũng gợi ý "Nếu có vấn đề với việc ký, bạn có thể thử giá trị gpg --list-secret-key để xem gpg có thể diễn giải giá trị như thế nào. Nếu lệnh đó không liệt kê bất kỳ khóa hoặc nhiều khóa, hãy thử tìm một số giá trị khác (như keyid), gpg đó có thể dễ dàng liên kết với một khóa duy nhất. " Vì vậy, tôi cũng đã kiểm tra và nhận được:

# gpg --list-secret-keys DD219672
sec   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <root@xxxxxxxxxx.com>

Và cuối cùng tôi đã có thể liên lạc với quản trị viên hệ thống đầu tiên thiết lập các repros của chúng tôi và anh ấy đề nghị thử một khóa mà không cần cụm mật khẩu. Vì vậy, tôi đã tạo một khóa ký mới, DD219672, đã xuất bản nó, trải qua các bước trên một lần nữa nhưng với kết quả tương tự.

Hôm nay, sau khi đọc và nghiên cứu nhiều hơn về các trang người đàn ông và lưu ý rằng tác nhân pgp sẽ tự động bắt đầu khi tôi chạy reprepro, tôi quyết định đuổi theo nó một lúc.

Tôi đã thêm một gpg-agent.conf với

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

Và tôi có thể thấy trong nhật ký rằng gpg-agent không tìm thấy các khóa

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]

Cho đến nay tôi vẫn chưa thể tìm ra nơi gpg-agent đang tìm các khóa mà nó liệt kê trong HAVKEY và làm thế nào để chỉ đúng hướng để tìm khóa mới, DD219672, để ký các gói cập nhật của chúng tôi.

Câu trả lời:


19

Tôi đã có cùng một vấn đề, và sau nhiều thất vọng cuối cùng đã tìm ra những gì đang xảy ra.

Công repreprocụ này sử dụng gpgme, dựa trên gnupg2. Một bản phát hành gần đây đã thay đổi cách xử lý vòng khóa bí mật: https://www.gnupg.org/faq/whats-new-in-2.1.html

gpg được sử dụng để giữ các cặp khóa công khai trong hai tệp: pubring.gpgsecring.gpg... Với GnuPG 2.1, điều này đã thay đổi ... Để dễ dàng di chuyển sang phương thức không bảo mật, gpg phát hiện sự hiện diện của a secring.gpgvà chuyển đổi các phím đang hoạt động vào kho lưu trữ khóa của gpg-agent (đây là private-keys-v1.dthư mục bên dưới thư mục chính GnuPG ( ~/.gnupg)). Điều này chỉ được thực hiện một lần và secring.gpgsau đó không còn được chạm vào bởi gpg. Điều này cho phép cùng tồn tại các phiên bản GnuPG cũ hơn với GnuPG 2.1. Tuy nhiên, bất kỳ thay đổi nào đối với các khóa riêng bằng cách sử dụng gpg mới sẽ không hiển thị khi sử dụng các phiên bản GnuPG trước 2.1 và ngược lại.

Do đó, nếu bạn tạo khóa mới bằng gpg, gpg2 sẽ không nhìn thấy khóa đó và ngược lại.

Khắc phục nhanh mà hiệu quả với tôi:

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

Và nếu bạn cần đi theo con đường khác, tất nhiên:

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

Tùy thuộc vào thiết lập của bạn, bạn cũng có thể muốn / cần thêm --export-secret-subkeys

Sau khi làm như trên, repreprolàm việc đúng với khóa mới của tôi.


2
Anh bạn, bạn xứng đáng nhận huy chương vì đã theo dõi điều đó.
Andrew Schulman

2

Đối với tôi, vấn đề là tôi đã tạo khóa với tư cách là người dùngchạy reprepro với quyền root .

Điều đã xảy ra là các khóa mà tôi tạo "không sudo" được thêm vào cục bộ của tôi pubring.gpg. Khi tôi chạy, sudo reprepro ...tôi chạy nó với quyền root và do đó nó cố gắng tìm khóa trong root pubring.gpgvà rõ ràng là không tìm thấy.

Giải pháp là chạy tất cả gpgcác lệnh dưới dạng root (eq. sudo -iVà sau đó gpg --gen-key). Hãy chắc chắn rằng khi bạn chạy, sudo gpg --list-keysbạn sẽ thấy các phím và dòng mong muốn của mình /root/.gnupg/pubring.gpg.

Mong rằng sẽ giúp!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.