如何设置gpg键的默认uid来签署git中的提交和标签?

时间:2018-07-14 20:55:46

标签: git config gnupg

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

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

现在,这是问题所在:当我编码并想要对标签/提交进行签名时,我必须将我的“ dev”邮件设置为主要邮件。但是,在使用雷鸟或gajim时,应将私人gmail地址列为第一位,以免造成混淆。

此刻,我必须通过在终端中编写手动将一个uid或另一个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,或者我注定要手动切换/具有两个单独的键?

1 个答案:

答案 0 :(得分:1)

当开发人员验证您的git commit时,为其显示的主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)

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