【问题标题】:How to set default uid of gpg key to sign commits and tags in git?如何设置 gpg 密钥的默认 uid 以在 git 中签署提交和标签?
【发布时间】:2018-07-14 20:55:46
【问题描述】:

我曾经有两个单独的 gpg 密钥(一对密钥) - 一个用于加密我的个人电子邮件,其中包含我在 uid 中的 gmail 地址,第二个密钥用于公开签署我的提交并将它们与我的另一封电子邮件一起发布。

我最近改变了这种方法,只是将两封电子邮件都添加到一个密钥中,另一个刚刚过期。我知道我公开了我的 gmail 地址,这对我来说很好。

现在,问题来了:当我编写代码并想要签署标签/提交时,我必须将我的“开发”邮件设置为主要邮件。但是,在使用 Thunderbird 或 gajim 时,私人 gmail 地址应列在最前面,以免混淆。

目前我必须通过在终端中写入手动将一个 uid 或另一个设置为主要:

gpg2 --edit <keyid>
uid 1 (or 2)
primary
save

现在有人有更有效的方法吗?我知道设置 git config --global 或编辑 ~/.gitconfig 文件。我知道我可以将signingkey 选项放在那里,这就是我所做的,因为我总是生成单独的(第三个)密钥来签名以避免使用主键(所以我可以只撤销子键)。

但此选项仅指密钥指纹,而不是 uid。 Git config user.email 和 user.name 听起来是一种解决方案,但是它们不对应于 gpg 身份。

简而言之:有没有办法设置 git 使用的默认 gpg uid 还是我注定要手动切换/拥有两个单独的键?

【问题讨论】:

  • 我也在寻找这个问题的答案。

标签: git config gnupg


【解决方案1】:

当开发人员验证您的 git 提交时,为他们显示的主要 uid 是您的公钥的本地副本上的那个,而不是您签署提交时设置的主要 uid。例如:

# Setup test key
export GNUPGHOME=./test_gpg_home
mkdir -m700 "$GNUPGHOME"
gpg --quick-gen-key "personal" ed25519 cert
# Set $FPR to be the test key fingerprint (40 char identifier)
FPR="0000000000000000000000000000000000000000"
gpg --quick-add-uid "$FPR" "developer"
gpg --quick-add-key "$FPR" cv25519 encr
gpg --quick-add-key "$FPR" ed25519 sign

# Send a personal contact a public key with personal as primary
mkdir -m700 ./personal_gpg_home
gpg --quick-set-primary-uid "$FPR" "personal"
gpg --output ./personal.gpg --export "$FPR"
gpg --homedir=./personal_gpg_home --import < ./personal.gpg

# Send a dev contact a public key with developer as primary
mkdir -m700 ./dev_gpg_home
gpg --quick-set-primary-uid "$FPR" "developer"
gpg --output ./dev.gpg --export "$FPR"
gpg --homedir=./dev_gpg_home --import < ./dev.gpg

# Add new uid and set it to primary
gpg --quick-add-uid "$FPR" "unshared"
gpg --quick-set-primary-uid "$FPR" "unshared"

# Encryption
echo "my message" > msg.txt
gpg --homedir=./personal_gpg_home --recipient "personal" --encrypt msg.txt
# ... (should show personal as recipient)
gpg --homedir=./dev_gpg_home --recipient "developer" --encrypt msg.txt
# ... (should show developer as recipient)
gpg --decrypt msg.txt.gpg
# ... (should show unshared as recipient)

# Verification
gpg --default-key "$FPR" --sign msg.txt
# ... (will appear as if you are signing as unshared)
gpg --homedir=./personal_gpg_home  --verify msg.txt.gpg
# ... (should show personal as primary uid)
gpg --homedir=./dev_gpg_home  --verify msg.txt.gpg
# ... (should show developer as primary uid)

您可以为您的个人联系人提供一个将您的个人 uid 设置为主的公钥,并为其他开发人员提供一个将您的开发人员 uid 设置为主的公钥,但如果他们刷新您的密钥副本,则主 uid 将是最近设置的一张。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 2014-10-09
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多