Skip to main content

Telling Git about your signing key

To sign commits locally, you need to inform Git that there's a GPG, SSH, or X.509 key you'd like to use.

Telling Git about your GPG key

If you're using a GPG key that matches your committer identity and your verified email address associated with your account on GitHub.com, then you can begin signing commits and signing tags.

If you don't have a GPG key that matches your committer identity, you need to associate an email with an existing key. For more information, see "Associating an email with your GPG key".

If you have multiple GPG keys, you need to tell Git which one to use.

  1. Abra TerminalTerminalGit Bash.

  2. Use el comando gpg --list-secret-keys --keyid-format=long para enumerar el formato largo de las claves de GPG para las que tiene una clave pública y privada. Se requiere una llave privada para registrar confirmaciones o etiquetas.

    Shell
    $ gpg --list-secret-keys --keyid-format=long

    Nota: Es posible que en algunas instalaciones de GPG en Linux sea necesario usar gpg2 --list-keys --keyid-format LONG para ver una lista de las claves existentes en su lugar. En este caso, también tendrá que configurar Git para que use gpg2 mediante la ejecución de git config --global gpg.program gpg2.

  3. Desde la lista de llaves GPG, compia la forma larga de la ID de la llave GPG que quieres utilizar. En este ejemplo, el id. de clave de GPG es 3AA5C34371567BD2:

    Shell
    $ gpg --list-secret-keys --keyid-format=long
    /Users/hubot/.gnupg/secring.gpg
    ------------------------------------
    sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
    uid                          Hubot <hubot@example.com>
    ssb   4096R/42B317FD4BA89E7A 2016-03-10
  4. Para configurar tu llave de firma GPG principal en Git, pega el siguiente texto en sustitución de la ID de la llave GPG principal que quieras utilizar. En este ejemplo, el id. de clave de GPG es 3AA5C34371567BD2:

    $ git config --global user.signingkey 3AA5C34371567BD2

    Como alternativa, al establecer una subclave, incluye el sufijo !. En este ejemplo, el id. de subclave de GPG es 4BB6D45482678BE3:

    $ git config --global user.signingkey 4BB6D45482678BE3!
  5. If you aren't using the GPG suite, run the following command in the zsh shell to add the GPG key to your .zshrc file, if it exists, or your .zprofile file:

    $ if [ -r ~/.zshrc ]; then echo 'export GPG_TTY=$(tty)' >> ~/.zshrc; \
      else echo 'export GPG_TTY=$(tty)' >> ~/.zprofile; fi

    Alternatively, if you use the bash shell, run this command:

    $ if [ -r ~/.bash_profile ]; then echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile; \
      else echo 'export GPG_TTY=$(tty)' >> ~/.profile; fi
  6. Optionally, to prompt you to enter a PIN or passphrase when required, install pinentry-mac. For example, using Homebrew:

    $ brew install pinentry-mac
    $ echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
    $ killall gpg-agent

Telling Git about your GPG key

If you're using a GPG key that matches your committer identity and your verified email address associated with your account on GitHub.com, then you can begin signing commits and signing tags.

If you don't have a GPG key that matches your committer identity, you need to associate an email with an existing key. For more information, see "Associating an email with your GPG key".

If you have multiple GPG keys, you need to tell Git which one to use.

  1. Abra TerminalTerminalGit Bash.

  2. Use el comando gpg --list-secret-keys --keyid-format=long para enumerar el formato largo de las claves de GPG para las que tiene una clave pública y privada. Se requiere una llave privada para registrar confirmaciones o etiquetas.

    Shell
    $ gpg --list-secret-keys --keyid-format=long

    Nota: Es posible que en algunas instalaciones de GPG en Linux sea necesario usar gpg2 --list-keys --keyid-format LONG para ver una lista de las claves existentes en su lugar. En este caso, también tendrá que configurar Git para que use gpg2 mediante la ejecución de git config --global gpg.program gpg2.

  3. Desde la lista de llaves GPG, compia la forma larga de la ID de la llave GPG que quieres utilizar. En este ejemplo, el id. de clave de GPG es 3AA5C34371567BD2:

    Shell
    $ gpg --list-secret-keys --keyid-format=long
    /Users/hubot/.gnupg/secring.gpg
    ------------------------------------
    sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
    uid                          Hubot <hubot@example.com>
    ssb   4096R/42B317FD4BA89E7A 2016-03-10
  4. Para configurar tu llave de firma GPG principal en Git, pega el siguiente texto en sustitución de la ID de la llave GPG principal que quieras utilizar. En este ejemplo, el id. de clave de GPG es 3AA5C34371567BD2:

    $ git config --global user.signingkey 3AA5C34371567BD2

    Como alternativa, al establecer una subclave, incluye el sufijo !. En este ejemplo, el id. de subclave de GPG es 4BB6D45482678BE3:

    $ git config --global user.signingkey 4BB6D45482678BE3!

Telling Git about your GPG key

If you're using a GPG key that matches your committer identity and your verified email address associated with your account on GitHub.com, then you can begin signing commits and signing tags.

If you don't have a GPG key that matches your committer identity, you need to associate an email with an existing key. For more information, see "Associating an email with your GPG key".

If you have multiple GPG keys, you need to tell Git which one to use.

  1. Abra TerminalTerminalGit Bash.

  2. Use el comando gpg --list-secret-keys --keyid-format=long para enumerar el formato largo de las claves de GPG para las que tiene una clave pública y privada. Se requiere una llave privada para registrar confirmaciones o etiquetas.

    Shell
    $ gpg --list-secret-keys --keyid-format=long

    Nota: Es posible que en algunas instalaciones de GPG en Linux sea necesario usar gpg2 --list-keys --keyid-format LONG para ver una lista de las claves existentes en su lugar. En este caso, también tendrá que configurar Git para que use gpg2 mediante la ejecución de git config --global gpg.program gpg2.

  3. Desde la lista de llaves GPG, compia la forma larga de la ID de la llave GPG que quieres utilizar. En este ejemplo, el id. de clave de GPG es 3AA5C34371567BD2:

    Shell
    $ gpg --list-secret-keys --keyid-format=long
    /Users/hubot/.gnupg/secring.gpg
    ------------------------------------
    sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
    uid                          Hubot <hubot@example.com>
    ssb   4096R/42B317FD4BA89E7A 2016-03-10
  4. Para configurar tu llave de firma GPG principal en Git, pega el siguiente texto en sustitución de la ID de la llave GPG principal que quieras utilizar. En este ejemplo, el id. de clave de GPG es 3AA5C34371567BD2:

    $ git config --global user.signingkey 3AA5C34371567BD2

    Como alternativa, al establecer una subclave, incluye el sufijo !. En este ejemplo, el id. de subclave de GPG es 4BB6D45482678BE3:

    $ git config --global user.signingkey 4BB6D45482678BE3!
  5. To add your GPG key to your .bashrc startup file, run the following command:

    $ [ -f ~/.bashrc ] && echo 'export GPG_TTY=$(tty)' >> ~/.bashrc
    

Telling Git about your SSH key

You can use an existing SSH key to sign commits and tags, or generate a new one specifically for signing. For more information, see "Generating a new SSH key and adding it to the ssh-agent."

Note: SSH signature verification is available in Git 2.34 or later. To update your version of Git, see the Git website.

  1. Abra TerminalTerminalGit Bash.

  2. Configure Git to use SSH to sign commits and tags:

    $ git config --global gpg.format ssh
    
  3. Copy the SSH public key to your clipboard.

    If your SSH public key file has a different name than the example code, modify the filename to match your current setup. When copying your key, don't add any newlines or whitespace.

    $ pbcopy < ~/.ssh/id_ed25519.pub
      # Copies the contents of the id_ed25519.pub file to your clipboard

    Tip: If pbcopy isn't working, you can locate the hidden .ssh folder, open the file in your favorite text editor, and copy it to your clipboard.

    $ clip < ~/.ssh/id_ed25519.pub
      # Copies the contents of the id_ed25519.pub file to your clipboard

    Tip: If clip isn't working, you can locate the hidden .ssh folder, open the file in your favorite text editor, and copy it to your clipboard.

    $ cat ~/.ssh/id_ed25519.pub
      # Then select and copy the contents of the id_ed25519.pub file
      # displayed in the terminal to your clipboard

    Tip: Alternatively, you can locate the hidden .ssh folder, open the file in your favorite text editor, and copy it to your clipboard.

  4. Para configurar tu clave de firma SSH en Git, pega el texto siguiente en sustitución del contenido del Portapapeles de la clave que quieras utilizar. Dado que la clave contiene espacios, debes ponerlo entre comillas:

    $ git config --global user.signingkey 'ssh-ed25519 AAAAC3(...) user@example.com'
    

Informarle a Git acerca de tu llave X.509

Puedes usar smimesign para firmar confirmaciones y etiquetas mediante S/MIME.

Nota: La comprobación de la firma S/MIME está disponible en Git 2.19 o posterior. Para actualizar la versión de Git, vea el sitio web de Git.

  1. Instale smimesign.
  2. Abra TerminalTerminalGit Bash.
  3. Configura Git para que use S/MIME para firmar confirmaciones y etiquetas. En Git 2.19 o posterior, use los comandos git config gpg.x509.program y git config gpg.format:
  • Para utilizar S/MIME para firmar todos los repositorios:
    $ git config --global gpg.x509.program smimesign
    $ git config --global gpg.format x509
  • Para utilizar S/MIME para firmar un repositorio único:
    $ cd /path/to/my/repository
    $ git config --local gpg.x509.program smimesign
    $ git config --local gpg.format x509
    En Git 2.18 o anterior, use el comando git config gpg.program:
  • Para utilizar S/MIME para firmar todos los repositorios:
    $ git config --global gpg.program smimesign
  • Para utilizar S/MIME para firmar un repositorio único:
    $ cd /path/to/my/repository
    $ git config --local gpg.program smimesign
    Si estás utilizando una llave X.509 que coincide con tu identidad de persona que confirma el cambio, puedes comenzar firmando confirmaciones y etiquetas.
  1. Si no usa una clave X.509 que coincida con la identidad del responsable de la confirmación, enumere las claves X.509 para las que tenga un certificado y una clave mediante el comando smimesign --list-keys.
    $ smimesign --list-keys
  2. De la lista de llaves X.509, copia el ID del certificado de la llave X.509 que desearías utilizar. En este ejemplo, el id. de certificado es 0ff455a2708394633e4bb2f88002e3cd80cbd76f:
    $ smimesign --list-keys
                 ID: 0ff455a2708394633e4bb2f88002e3cd80cbd76f
                S/N: a2dfa7e8c9c4d1616f1009c988bb70f
          Algorithm: SHA256-RSA
           Validity: 2017-11-22 00:00:00 +0000 UTC - 2020-11-22 12:00:00 +0000 UTC
             Issuer: CN=DigiCert SHA2 Assured ID CA,OU=www.digicert.com,O=DigiCert Inc,C=US
            Subject: CN=Octocat,O=GitHub\, Inc.,L=San Francisco,ST=California,C=US
             Emails: octocat@github.com
  3. Para configurar tu llave de firma X.509 en Git, pega el texto de abajo, sustituyendo el ID del certificado que copiaste anteriormente.
  • Para utilizar tu llave X.509 para firmar todos los repositorios:
    $ git config --global user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
  • Para utilizar tu llave X.509 para firmar un repositorio único:
    $ cd /path/to/my/repository
    $ git config --local user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f

Further reading