Runar Ovesen Hjerpbakk

Software Philosopher

Signing commits using GitHub Desktop on macOS

Edit: this is now trivally easy to do using 1Password, read the instructions on their website.

This morning I got inspired by Phil Haack’s post on proving the identity of package authors. How can you know people are who they say they are online? A step of the way is a social proof, that is you link your identity on many different services together, thus increasing the certainty that you are you for every service added.

The place to tie these identities together is Keybase.io.

So not only did I install and join Keybase, I decided to begin signing my Git commits with my PGP-key. Signed commits on GitHub gets a nice Verified badge when the key used to sign the commit matches that registered on the given user’s profile.

This increases the public’s confidence that the commit was indeed submitted by the actual person, and when this again can be verified on services like Keybase we’re almost there.

Setup commit signing

The following is a guide to setup automatic signing of commits on macOS. It even works with the GitHub Desktop app!

Install GPG Keychain from GPG Suite

Install GPG Suite, you can safely do a customized install and deselect GPGMail which you do not need.

Install Keybase and create or import a PGP key

First install Keybase, then create or import a PGP key.

Create a new key

The UI is intuitive and creating a PGP key should be easy. Remember to include the email address you also use on GitHub. This is the key you’ll use to sign your commits.

Import an existing key

An existing key can be imported using the following command:

keybase pgp pull

Import your key locally from Keybase

Visit your Keybase profile and copy the key identifier, mine is D0EF4E5CC7F16087, and use this in the following commands.

First import your public key:

keybase pgp export -q D0EF4E5CC7F16087 | gpg --import

And then import your private key:

keybase pgp export -q D0EF4E5CC7F16087 --secret | gpg --allow-secret-key-import --import

Make GitHub aware of your key

Put your GPG key on the pasteboard:

keybase pgp export -q D0EF4E5CC7F16087 | pbcopy

Open https://github.com/settings/keys, press New GPG Key and paste your key in the key textbox.

Configure Git to automatically sign your commits

Git is configured using a .gitconfig-file. We do not need to edit this file manually but can use a couple of git config commands to achieve what we want.

First, set gpg2 from the GPG Suite as your gpg.progam:

git config --global gpg.program /usr/local/MacGPG2/bin/gpg2

Then you find the ID of the key which you’ll use to sign your commits:

gpg --list-secret-keys

The item starting with sec contains the key ID you need. In the following command, replace 5FD93755 with the key ID from the previous command:

git config --global user.signingkey 5FD93755

Finally, tell Git to sign your commits:

git config --global commit.gpgsign true

From now on, every time you do a commit using the git commit command, GitHub Desktop or any other Git-app, the commit will be signed with your personal key. This key is known to GitHub which will mark your commits as Verified and anybody can look you up on Keybase to see that the commit indeed came from you.