如何设置 gpg 密钥的默认 uid 以在 git 中签署提交和标签?

mDf*_*fRg 5 git config gnupg

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

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

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

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

gpg2 --edit <keyid>
uid 1 (or 2)
primary
save
Run Code Online (Sandbox Code Playgroud)

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

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

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

leo*_*cp1 2

当开发人员验证您的 git 提交时,为他们显示的主 uid 是您的公钥的本地副本上的主 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)
Run Code Online (Sandbox Code Playgroud)

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