无法使用 GnuPG 通过 mutt 回复电子邮件 - 要求 "keyID"

Can't reply to email via mutt with GnuPG - asks for "keyID"

我在 Ubuntu 上使用带有 GnuPG 的 mutt。我有这些 GnuPG 的常规设置:

set pgp_decode_command         = "gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
set pgp_verify_command         = "gpg --no-verbose --batch --output - --verify %s %f"
set pgp_decrypt_command        = "gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
set pgp_sign_command           = "gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
set pgp_clearsign_command      = "gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
set pgp_import_command         = "gpg --no-verbose --import -v %f"
set pgp_export_command         = "gpg --no-verbose --export --armor %r"
set pgp_verify_key_command     = "gpg --no-verbose --batch --fingerprint --check-sigs %r"
set pgp_list_pubring_command   = "gpg --no-verbose --batch --with-colons --list-keys %r"
set pgp_list_secring_command   = "gpg --no-verbose --batch --with-colons --list-secret-keys %r"

unset pgp_retainable_sigs

# set pgp_ignore_subkeys
# set pgp_verify_sig=yes
# set pgp_create_traditional     = no
# set pgp_autosign               = no
# set pgp_autoencrypt            = no
# set pgp_replysignencrypted
# set pgp_replyencrypt           = yes
# set pgp_replysign              = yes

set crypt_autosign                     # automatically sign all outgoing messages
# set crypt_replysign                  # sign only replies to signed messages
# set crypt_autoencrypt=yes            # automatically encrypt outgoing msgs
# set crypt_replyencrypt=yes           # encryp only replies to signed messages
# set crypt_replysignencrypted=yes       # encrypt & sign replies to encrypted msgs
set crypt_verify_sig=yes               # auto verify msg signature when opened
set pgp_create_traditional = yes       # http://www.rdrop.com/docs/mutt/manual236.html#pgp_create_traditional

set pgp_timeout                = 3600
set pgp_good_sign              = "^gpg: Good signature from"

我对相关的特定帐户有这些设置:

send-hook mark.nichols@gmial.com 'set pgp_autosign'
pgp-hook mark.nichols@gmail.com 53445200

set pgp_encrypt_only_command="/usr/lb/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 53445200 -- -r %r -- %f"
set pgp_encrypt_sign_command="/usr/lib/mutt/pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 53445200 -- -r %r -- %f"
set pgp_sign_as=53445200

如果我向没有 GPG 密钥的人发送电子邮件,则外发电子邮件会使用我的密钥进行数字签名并被发送。但是,当我收到对该电子邮件的回复并依次回复时,我无法按我的要求回复:

Enter keyID for <recipient email>

我可以使用 Ctrl-G 退出该对话框,但我无法通过它。一开始我以为是这两个设置之一:

# set crypt_replyencrypt=yes           # encryp only replies to signed messages
# set crypt_replysignencrypted=yes       # encrypt & sign replies to encrypted msgs

但即使他们被注释掉了,我还是被要求提供一个不存在的密钥。我缺少的要求我在回复时为接收者指定密钥的设置在哪里?

谢谢

答案是使用GPGME。 GPGME 库封装了大部分(如果不是全部的话)常用的 GnuPG 函数。只需几行配置,所有 GnuPG 相关的东西 "just works." 这个帖子是一个很好的指南:https://sanctum.geek.nz/arabesque/gnu-linux-crypto-email/

最后我的设置现在看起来像:

# Use GPGME
set crypt_use_gpgme = yes

# Sign replies to signed emails
set crypt_replysign = yes

# Encrypt replies to encrypted emails
set crypt_replyencrypt = yes

# Encrypt and sign replies to encrypted and signed email
set crypt_replysignencrypted = yes

# Attempt to verify signatures automatically
set crypt_verify_sig = yes

# Use my key for signing and encrypting
set pgp_sign_as = 0x53445200

# Automatically sign all out-going email
set crypt_autosign = yes

简单得多,而且有效。