나는 이메일을 암호화하기 위해 데비안 버스터(테스트) amd64에서 Evolution을 실행하는 GnuPG를 사용하고 있습니다. 내 GPG 개인 키는 GPG 스마트 카드 역할을 하는 YubiKey에 있습니다. Evolution에서는 CalDAV를 사용하여 내 캘린더를 로드할 수 없기 때문에진화 재설정. CalDAV는 현재 잘 작동하고 있습니다.
그러나 재설정 후 또 다른 문제가 발생했습니다. GPG 암호화/서명이 더 이상 작동하지 않는다는 것입니다. 이메일 복호화에는 문제가 없습니다.
또한 GPG 키를 올바르게 가져와서 다음에 나열해도 계정 설정에서 내 GPG 키를 선택할 수 없습니다 gpg -K
.
이제 키를 선택할 수 있습니다.
암호화된 이메일을 보내려고 하면 실패하고 Evolution에서 다음 오류를 표시합니다.
Could not create message.
You may need to select different mail options.
Detailed error: Failed to encrypt: Invalid recipient <[email protected]> specified. A common issue is that the gpg2 doesn’t have imported public key for this recipient.
하지만 내 공개 키예수입. 옵션을 비활성화해도 같은 일이 발생합니다 Always encrypt to myself when sending encrypted messages with this account
. 그런 다음 오류는 다음과 같습니다
Detailed error: Failed to encrypt: Invalid recipient <[email protected]> specified. A common issue is that the gpg2 doesn’t have imported public key for this recipient.
명령을 사용하여 명령줄에서 암호화/서명하는 gpg
것이 효과적입니다. 스마트 카드에 없는 개인 키를 사용하는 것도 작동하지 않습니다. GPG 및 Evolution을 재설정해도 효과가 없습니다.
나는 지금 무엇을 해야할지 모르겠습니다. 다들 감사 해요:)
편집하다: strace -p $(pidof evolution) -f -e trace=execve
복호화 시 출력(잘 작동함):
[pid 4613] execve("/usr/local/bin/gpg2", ["gpg2", "--verbose", "--no-secmem-warning", "--no-greeting", "--no-tty", "--status-fd=66", "--command-fd=67", "--verify-options", "show-photos", "--photo-viewer", "/usr/lib/evolution/camel-gpg-pho"..., "--decrypt", "--output", "-"], [/* 34 vars */]) = -1 ENOENT (No such file or directory)
[pid 4613] execve("/usr/bin/gpg2", ["gpg2", "--verbose", "--no-secmem-warning", "--no-greeting", "--no-tty", "--status-fd=66", "--command-fd=67", "--verify-options", "show-photos", "--photo-viewer", "/usr/lib/evolution/camel-gpg-pho"..., "--decrypt", "--output", "-"], [/* 34 vars */]) = 0
암호화 시(실패):
[pid 4537] execve("/usr/local/bin/gpg2", ["gpg2", "--verbose", "--no-secmem-warning", "--no-greeting", "--no-tty", "--batch", "--yes", "--status-fd=67", "--encrypt", "--armor", "-u", "[email protected]", "-r", "<[email protected]>", "--output", "-"], [/* 34 vars */]) = -1 ENOENT (No such file or directory)
[pid 4537] execve("/usr/bin/gpg2", ["gpg2", "--verbose", "--no-secmem-warning", "--no-greeting", "--no-tty", "--batch", "--yes", "--status-fd=67", "--encrypt", "--armor", "-u", "[email protected]", "-r", "<[email protected]>", "--output", "-"], [/* 34 vars */]) = 0
파일이 /usr/local/bin/gpg2
존재하지 않으며 존재하지 않는 것 같습니다.데비안 패키지의 일부.
편집 2:@Hauke Laging이 댓글에 게시한 명령은 작동하지만 작업을 수행하는지 대화형으로 확인해야 합니다(예: 명령줄을 사용하여 수동으로 암호화할 때).
echo foo | /usr/bin/gpg2 --status-fd=1 --encrypt --armor -u [email protected] -r [email protected] --output -
Evolution이 실행하려는 명령이 실패했지만( <>
zsh에 문제를 일으키는 명령을 제거했습니다):
➜ ~ gpg2 --verbose --no-secmem-warning --no-greeting --no-tty --batch --yes --status-fd=67 --encrypt --armor -u [email protected] -r [email protected] --output
gpg: Fatal: status-fd is invalid: Bad file descriptor
--status-fd=1
다른 오류로 인해 설치가 계속 실패합니다.
➜ ~ echo "foo" | gpg2 --verbose --no-secmem-warning --no-greeting --no-tty --batch --yes --status-fd=1 --encrypt --armor -u [email protected] -r [email protected] --output -
[GNUPG:] KEY_CONSIDERED <recipient's key fingerprint> 0
gpg: using pgp trust model
gpg: using subkey <recipient's encryption subkey id> instead of primary key <recipient's primary key id>
[GNUPG:] KEY_CONSIDERED <recipient's key fingerprint> 0
gpg: automatically retrieved '[email protected]' via Local
gpg: <recipient's encryption subkey id>: There is no assurance this key belongs to the named user
[GNUPG:] INV_RECP 10 [email protected]
[GNUPG:] FAILURE encrypt 53
gpg: [stdin]: encryption failed: Unusable public key
편집 3:방금 테스트했습니다. Evolution의 메시지에 서명하는 것은 메시지를 해독하는 것과 마찬가지로 작동합니다.
명령줄을 사용하여 메시지를 수동으로 암호화하면 다음 메시지가 표시되는데, 이것이 문제의 원인이라고 생각됩니다.
➜ ~ echo "foo" | gpg --encrypt -r [email protected] --armor
gpg: automatically retrieved '[email protected]' via Local
gpg: <recipient's encryption subkey id>: There is no assurance this key belongs to the named user
sub rsa4096/<recipient's encryption subkey id> 2015-10-14 Recipient's Name <[email protected]>
Primary key fingerprint: <recipient's key fingerprint>
Subkey fingerprint: <recipient's encryption subkey fingerprint>
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
-----BEGIN PGP MESSAGE-----
[...]
-----END PGP MESSAGE-----
편집 4gpg --edit-key
: 위 메시지는 소유자 신뢰가 누락되어 발생했기 때문에(적어도 그렇게 생각합니다) 다음을 사용하여 수신자의 소유자 신뢰(이전에 설정되지 않음) 를 설정하고 싶습니다 .
gpg> trust
pub rsa4096/<some key id>
created: <some date in the past> expires: <some date in the future> usage: SCA
trust: unknown validity: unknown
sub rsa4096/<some other key id>
created: <some date in the past> expires: <some date in the future> usage: E
[ unknown] (1). Pecipient's Name <[email protected]>
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 3
pub rsa4096/<some key id>
created: <some date in the past> expires: <some date in the future> usage: SCA
trust: marginal validity: unknown
sub rsa4096/<some other key id>
created: <some date in the past> expires: <some date in the future> usage: E
[ unknown] (1). Pecipient's Name <[email protected]>
그래서 받는 사람의 ownertrust를 설정했는데 왜 [ unknown]
이렇게 되는 걸까요?
답변1
OpenPGP 유효성 체계가 어떻게 작동하는지 아직 이해하지 못했습니다. 하지만 그 이상으로, 응용 프로그램은 유효하지 않은 키를 사용하는 데 문제가 있어서는 안 됩니다(따라서 Evolution 개발자에게 불만을 제기할 수 있습니다).
인증서를 유효하게 만드는 방법에는 두 가지가 있습니다(표준 모드에서 GnuPG 사용).
- 소유자 신뢰는 최종 신뢰로 설정됩니다.
- 최종 소유자가 신뢰하는 키의 유효한(만료되지 않은) 서명이 있습니다.
즉, 최종 소유자 신뢰를 갖고 있는 키링에 인증서가 없으면 자동으로 실패합니다.
또는 다음 명령을 사용하여 신뢰 모델을 변경할 수 있습니다.
--trust-model direct
그런 다음 시도하면서 유효성을 직접 설정할 수 있습니다. 그러나 인증서는 "완전히 유효"해야 합니다. 한계 타당도가 충분하지 않습니다.
내 웹사이트에서 이에 대해 자세히 설명했습니다.
http://www.hauke-laging.de/sicherheit/openpgp.html#wot
텍스트는 독일어로 되어 있지만 블록에는 이해를 돕기 위한 일부 이미지가 있습니다.
답변2
활성화하면 Always trust keys in my keyring for encrypting
이 문제가 해결되었습니다.