Reprepro 내보내기에서 서명 키를 찾을 수 없습니다


13

우리는 몇 년 전에 이전 시스템 관리자가 설정 한 개인 데비안 저장소를 가지고 있습니다. 패키지는 repo 서버의 루트 사용자를 위해 여기에 표시된 것처럼 이전 키인 7610DDDE (철회해야 함)로 서명되었습니다.

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

아래의 모든 명령은 루트 사용자입니다. 서명을 위해 명시 적으로 만든 새 하위 키를 사용하도록 repository / conf / distributions 파일을 수정했습니다.

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

하지만 dput을 사용하여 패키지를 업데이트하면

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)

그리고 reprepro 내보내기를 직접 실행하면 다음과 같은 결과가 나타납니다.

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

나는 reprepro가 적절한 gnupg 디렉토리를 찾는 데 가능한 문제를 나타내는 몇 가지 오래된 스레드를 발견했으며 위의 동일한 결과로 시도했습니다.

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

한 스레드는 정상적으로 작동하는 것처럼 보이는 더미 파일에 서명하여 키 테스트를 제안했습니다.

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

reprepro 매뉴얼 페이지에 "서명에 문제가있는 경우 gpg --list-secret-keys 값 을 사용하여 gpg가 을 해석하는 방법을 확인할 수 있습니다. 해당 명령에 키나 여러 키가 나열되지 않으면 찾기를 시도하십시오. 다른 값 (예 : keyid)으로 인해 gpg가 고유 키와 더 쉽게 연관 될 수 있습니다. " 그래서 나는 그것을 확인하고 얻었다.

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

그리고 마지막으로 처음 재현을 설정 한 시스템 관리자와 연락 할 수 있었고 암호없이 키를 사용하는 것이 좋습니다. 그래서 새로운 서명 키 DD219672를 생성하여 게시했으며 위의 단계를 다시 수행했지만 동일한 결과를 얻었습니다.

오늘, 나는 더 많은 매뉴얼 페이지를 읽고 연구하고 reprepro를 실행할 때 pgp-agent가 자동으로 시작된다는 것을 알게 된 후에 한동안 그것을 쫓기로 결정했습니다.

gpg-agent.conf를 추가했습니다.

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

로그에서 gpg-agent가 키를 찾지 못하고 있음을 알 수 있습니다.

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]

지금까지 gpg-agent가 HAVKEY에 나열된 키를 찾는 위치와 업데이트 된 패키지에 서명하기 위해 새 키 DD219672를 찾기 위해 올바른 방향을 가리키는 방법을 알 수 없었습니다.

답변:


19

나는 같은 문제가 있었고 많은 좌절 끝에 마침내 무슨 일이 있었는지 추적했습니다.

reprepro도구는에 기반한 gpgme을 사용합니다 gnupg2. 최근 릴리스에서는 비밀 키 링 처리 방식이 변경되었습니다. https://www.gnupg.org/faq/whats-new-in-2.1.html

gpg는 공개 키 페어를 두 개의 파일로 유지하는 데 사용됩니다 : pubring.gpg그리고 secring.gpg... GnuPG 2.1에서 변경된 사항 ... gsec없는 방법으로 쉽게 마이그레이션하기 위해 gpg는 a의 존재를 감지하고 secring.gpg즉시 키를 변환합니다 gpg-agent의 키 저장소 (이 private-keys-v1.d디렉토리는 GnuPG 홈 디렉토리 ( ~/.gnupg) 아래 )에 있습니다. 이 작업은 한 번만 수행 secring.gpg되며 gpg 는 기존 항목 을 더 이상 건드리지 않습니다. 이를 통해 이전 GnuPG 버전과 GnuPG 2.1이 공존 할 수 있습니다. 그러나 새로운 gpg를 사용하여 개인 키를 변경하면 2.1 이전 버전의 GnuPG를 사용할 때 그 반대의 경우도 표시되지 않습니다.

따라서 gpg를 사용하여 새 키를 만들면 gpg2에서 키를 볼 수 없으며 그 반대도 마찬가지입니다.

나를 위해 일한 빠른 수정 :

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

그리고 당신이 다른 길을 갈 필요가 있다면, 물론 :

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

설정에 따라 추가하거나 추가해야 할 수도 있습니다 --export-secret-subkeys

위의 reprepro작업을 수행 한 후 새 키로 올바르게 작동했습니다.


2
야, 당신은 그것을 추적하기 위해 메달을받을 자격이 있습니다.
Andrew Schulman

2

나를 위해 문제는 내가이었다 사용자로 키 생성실행 된 루트로 reprepro .

무슨 일이 있었는지 "없이 sudo" 생성 키가 로컬에 추가되었습니다 pubring.gpg. 내가 실행할 때 sudo reprepro ...루트로 실행하므로 루트에서 키를 찾으려고 시도 pubring.gpg하고 분명히 키를 찾지 않습니다.

해결책은 모든 gpg명령을 루트 (eq. sudo -igpg --gen-key) 로 실행하는 것이 었습니다 . 당신이 실행할 때 sudo gpg --list-keys원하는 키와 라인을 볼 수 있는지 확인하십시오 /root/.gnupg/pubring.gpg.

희망이 도움이됩니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.