# Предоставление GIT информации о ключе для подписывания

Чтобы подписать фиксации локально, необходимо сообщить Git, что есть ключ GPG, SSH или X.509, который вы хотите использовать.

## Предоставление GIT информации о ключе GPG

<div class="ghd-tool mac">

Если вы используете ключ GPG, соответствующий удостоверению фиксации и проверенного адреса электронной почты, связанного с вашей учетной записью на GitHub.com, вы можете начать фиксации подписей и теги подписи.

> \[!NOTE]
> Если у вас нет ключа GPG, соответствующего вашему удостоверению автора фиксаций, необходимо связать адрес электронной почты с существующим ключом. Дополнительные сведения см. в разделе [Связывание адреса электронной почты с ключом GPG](/ru/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key).

Если у вас несколько ключей GPG, необходимо указать GIT, какой из них следует использовать.

1. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.

2. Если вы ранее настроили Git для использования другого формата ключа при подписании `--gpg-sign`с помощью этой конфигурации, не укажите этот формат, чтобы будет использоваться формат `openpgp` по умолчанию.

   ```shell
   git config --global --unset gpg.format
   ```

3. Команда `gpg --list-secret-keys --keyid-format=long` позволяет получить длинную форму ключей GPG, для которых у вас есть открытый и закрытый ключ. Закрытый ключ необходим для подписания фиксаций или тегов.

   ```shell copy
   gpg --list-secret-keys --keyid-format=long
   ```

   > \[!NOTE]
   > Для некоторых установок GPG в Linux может потребоваться `gpg2 --list-keys --keyid-format LONG` просмотреть список существующих ключей. В этом случае также нужно будет настроить Git для использования `gpg2`, выполнив `git config --global gpg.program gpg2`.

4. Из списка ключей GPG скопируйте длинную форму идентификатора ключа GPG, который вы хотите использовать. В этом примере идентификатором ключа GPG является `3AA5C34371567BD2`:

   ```shell copy
   $ 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/4BB6D45482678BE3 2016-03-10
   ```

5. Чтобы задать первичный ключ подписи GPG в Git, вставьте приведенный ниже текст, подставив идентификатор первичного ключа GPG, который вы хотите использовать. В этом примере идентификатором ключа GPG является `3AA5C34371567BD2`:

   ```shell
   git config --global user.signingkey 3AA5C34371567BD2
   ```

   Кроме того, может потребоваться использовать вложенный ключ. В этом примере идентификатором подраздела GPG является `4BB6D45482678BE3`:

   ```shell
   git config --global user.signingkey 4BB6D45482678BE3
   ```

   Если вы используете несколько ключей и вложенных ключей, следует добавить восклицательный знак `!` к ключу, чтобы сообщить git, что это ваш предпочтительный ключ. Иногда может потребоваться экранировать восклицательный знак с косой чертой: `\!`

6. При необходимости, чтобы настроить Git для подписывания всех фиксаций и тегов по умолчанию, введите следующую команду:

   ```shell
   git config --global commit.gpgsign true
   git config --global tag.gpgSign true
   ```

   Дополнительные сведения см. в разделе [Подписание фиксаций](/ru/authentication/managing-commit-signature-verification/signing-commits).

7. Если вы не используете набор GPG, выполните следующую команду в оболочке `zsh`, чтобы добавить ключ GPG в файл `.zshrc`, если он существует, или в файл `.zprofile`:

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

   Если вы используете оболочку `bash`, выполните следующую команду:

   ```shell
   $ if [ -r ~/.bash_profile ]; then echo -e '\nexport GPG_TTY=$(tty)' >> ~/.bash_profile; \
     else echo -e '\nexport GPG_TTY=$(tty)' >> ~/.profile; fi
   ```

8. Если необходимо запрашивать ПИН-код или парольную фразу, установите `pinentry-mac`. Например, при использовании [Homebrew](https://brew.sh/):

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

</div>

<div class="ghd-tool windows">

Если вы используете ключ GPG, соответствующий удостоверению фиксации и проверенного адреса электронной почты, связанного с вашей учетной записью на GitHub.com, вы можете начать фиксации подписей и теги подписи.

> \[!NOTE]
> Если у вас нет ключа GPG, соответствующего вашему удостоверению автора фиксаций, необходимо связать адрес электронной почты с существующим ключом. Дополнительные сведения см. в разделе [Связывание адреса электронной почты с ключом GPG](/ru/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key).

Если у вас несколько ключей GPG, необходимо указать GIT, какой из них следует использовать.

1. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.
2. Если вы ранее настроили Git для использования другого формата ключа при подписании `--gpg-sign`с помощью этой конфигурации, не укажите этот формат, чтобы будет использоваться формат `openpgp` по умолчанию.

   ```shell
   git config --global --unset gpg.format
   ```
3. Команда `gpg --list-secret-keys --keyid-format=long` позволяет получить длинную форму ключей GPG, для которых у вас есть открытый и закрытый ключ. Закрытый ключ необходим для подписания фиксаций или тегов.

   ```shell copy
   gpg --list-secret-keys --keyid-format=long
   ```

   > \[!NOTE]
   > Для некоторых установок GPG в Linux может потребоваться `gpg2 --list-keys --keyid-format LONG` просмотреть список существующих ключей. В этом случае также нужно будет настроить Git для использования `gpg2`, выполнив `git config --global gpg.program gpg2`.
4. Из списка ключей GPG скопируйте длинную форму идентификатора ключа GPG, который вы хотите использовать. В этом примере идентификатором ключа GPG является `3AA5C34371567BD2`:

   ```shell copy
   $ 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/4BB6D45482678BE3 2016-03-10
   ```
5. Чтобы задать первичный ключ подписи GPG в Git, вставьте приведенный ниже текст, подставив идентификатор первичного ключа GPG, который вы хотите использовать. В этом примере идентификатором ключа GPG является `3AA5C34371567BD2`:

   ```shell
   git config --global user.signingkey 3AA5C34371567BD2
   ```

   Кроме того, может потребоваться использовать вложенный ключ. В этом примере идентификатором подраздела GPG является `4BB6D45482678BE3`:

   ```shell
   git config --global user.signingkey 4BB6D45482678BE3
   ```

   Если вы используете несколько ключей и вложенных ключей, следует добавить восклицательный знак `!` к ключу, чтобы сообщить git, что это ваш предпочтительный ключ. Иногда может потребоваться экранировать восклицательный знак с косой чертой: `\!`
6. При необходимости, чтобы настроить Git для подписывания всех фиксаций и тегов по умолчанию, введите следующую команду:

   ```shell
   git config --global commit.gpgsign true
   git config --global tag.gpgSign true
   ```

   Дополнительные сведения см. в разделе [Подписание фиксаций](/ru/authentication/managing-commit-signature-verification/signing-commits).

</div>

<div class="ghd-tool linux">

Если вы используете ключ GPG, соответствующий удостоверению фиксации и проверенного адреса электронной почты, связанного с вашей учетной записью на GitHub.com, вы можете начать фиксации подписей и теги подписи.

> \[!NOTE]
> Если у вас нет ключа GPG, соответствующего вашему удостоверению автора фиксаций, необходимо связать адрес электронной почты с существующим ключом. Дополнительные сведения см. в разделе [Связывание адреса электронной почты с ключом GPG](/ru/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key).

Если у вас несколько ключей GPG, необходимо указать GIT, какой из них следует использовать.

1. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.
2. Если вы ранее настроили Git для использования другого формата ключа при подписании `--gpg-sign`с помощью этой конфигурации, не укажите этот формат, чтобы будет использоваться формат `openpgp` по умолчанию.

   ```shell
   git config --global --unset gpg.format
   ```
3. Команда `gpg --list-secret-keys --keyid-format=long` позволяет получить длинную форму ключей GPG, для которых у вас есть открытый и закрытый ключ. Закрытый ключ необходим для подписания фиксаций или тегов.

   ```shell copy
   gpg --list-secret-keys --keyid-format=long
   ```

   > \[!NOTE]
   > Для некоторых установок GPG в Linux может потребоваться `gpg2 --list-keys --keyid-format LONG` просмотреть список существующих ключей. В этом случае также нужно будет настроить Git для использования `gpg2`, выполнив `git config --global gpg.program gpg2`.
4. Из списка ключей GPG скопируйте длинную форму идентификатора ключа GPG, который вы хотите использовать. В этом примере идентификатором ключа GPG является `3AA5C34371567BD2`:

   ```shell copy
   $ 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/4BB6D45482678BE3 2016-03-10
   ```
5. Чтобы задать первичный ключ подписи GPG в Git, вставьте приведенный ниже текст, подставив идентификатор первичного ключа GPG, который вы хотите использовать. В этом примере идентификатором ключа GPG является `3AA5C34371567BD2`:

   ```shell
   git config --global user.signingkey 3AA5C34371567BD2
   ```

   Кроме того, может потребоваться использовать вложенный ключ. В этом примере идентификатором подраздела GPG является `4BB6D45482678BE3`:

   ```shell
   git config --global user.signingkey 4BB6D45482678BE3
   ```

   Если вы используете несколько ключей и вложенных ключей, следует добавить восклицательный знак `!` к ключу, чтобы сообщить git, что это ваш предпочтительный ключ. Иногда может потребоваться экранировать восклицательный знак с косой чертой: `\!`
6. При необходимости, чтобы настроить Git для подписывания всех фиксаций и тегов по умолчанию, введите следующую команду:

   ```shell
   git config --global commit.gpgsign true
   git config --global tag.gpgSign true
   ```

   Дополнительные сведения см. в разделе [Подписание фиксаций](/ru/authentication/managing-commit-signature-verification/signing-commits).
7. Чтобы добавить ключ GPG в файл запуска `.bashrc`, выполните следующую команду:

   ```bash
   [ -f ~/.bashrc ] && echo -e '\nexport GPG_TTY=$(tty)' >> ~/.bashrc
   ```

</div>

## Предоставление Git информации о ключе SSH

Существующий ключ SSH можно использовать для подписывания фиксаций и тегов или создания нового ключа специально для подписывания. Дополнительные сведения см. в разделе [Создание нового ключа SSH и его добавление в ssh-agent](/ru/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent).

> \[!NOTE]
> Проверка подписи SSH доступна в Git 2.34 или более поздней версии. Сведения об обновлении версии Git см. на веб-сайте [Git](https://git-scm.com/downloads).

1. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.
2. Настройте Git, чтобы использовать SSH для подписывания фиксаций и тегов:

   ```bash
   git config --global gpg.format ssh
   ```
3. Чтобы задать ключ подписи SSH в Git, вставьте приведенный ниже текст, заменив **/PATH/TO/. SSH/KEY. PUB** с путем к открытому ключу, который вы хотите использовать.

   ```bash
   git config --global user.signingkey /PATH/TO/.SSH/KEY.PUB
   ```

<div class="ghd-tool windows">

## Предоставление Git информации о вашем ключе X.509

Вы можете использовать [smimesign](https://github.com/github/smimesign) для подписывания фиксаций и тегов с помощью S/MIME.

> \[!NOTE]
> Проверка подписи S/MIME доступна в Git 2.19 или более поздней версии. Сведения об обновлении версии Git см. на веб-сайте [Git](https://git-scm.com/downloads).

1. Установите [smimesign](https://github.com/github/smimesign#installation).

2. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.

3. Настройте Git, чтобы использовать S/MIME для подписывания фиксаций и тегов. В Git 2.19 или более поздней версии используйте команды `git config gpg.x509.program` и `git config gpg.format`:
   * Чтобы использовать S/MIME для подписывания во всех репозиториях, воспользуйтесь следующим кодом:

     ```shell
     git config --global gpg.x509.program smimesign
     git config --global gpg.format x509
     ```

   * Чтобы использовать S/MIME для подписывания в одном репозитории, воспользуйтесь следующим кодом:

     ```shell
     cd PATH-TO-REPOSITORY
     git config --local gpg.x509.program smimesign
     git config --local gpg.format x509
     ```

     В Git 2.18 или более ранней версии используйте команду `git config gpg.program`:

   * Чтобы использовать S/MIME для подписывания во всех репозиториях, воспользуйтесь следующим кодом:

     ```shell
     git config --global gpg.program smimesign
     ```

   * Чтобы использовать S/MIME для подписывания в одном репозитории, воспользуйтесь следующим кодом:

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local gpg.program smimesign
     ```

     Если вы используете ключ X.509, соответствующий вашему удостоверению вносителя фиксаций, можно начать подписывание фиксаций и тегов.

4. Если вы не используете ключ X.509, соответствующий вашему удостоверению вносителя фиксаций, выведите список ключей X.509, для которых у вас есть сертификат и закрытый ключ, с помощью команды `smimesign --list-keys`.

   ```shell
   smimesign --list-keys
   ```

5. В списке ключей X.509 скопируйте идентификатор сертификата ключа X.509, который вы хотите использовать. В этом примере идентификатором сертификата является `0ff455a2708394633e4bb2f88002e3cd80cbd76f`:

   ```shell
   $ 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
   ```

6. Чтобы задать ключ подписывания X.509 в Git, вставьте приведенный ниже текст, подставив скопированный ранее идентификатор сертификата.
   * Чтобы использовать ключ X.509 для подписывания во всех репозиториях, воспользуйтесь следующим кодом:

     ```shell
     git config --global user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

   * Чтобы использовать ключ X.509 для подписывания в одном репозитории, воспользуйтесь следующим кодом:

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

</div>

<div class="ghd-tool mac">

## Предоставление Git информации о вашем ключе X.509

Вы можете использовать [smimesign](https://github.com/github/smimesign) для подписывания фиксаций и тегов с помощью S/MIME.

> \[!NOTE]
> Проверка подписи S/MIME доступна в Git 2.19 или более поздней версии. Сведения об обновлении версии Git см. на веб-сайте [Git](https://git-scm.com/downloads).

1. Установите [smimesign](https://github.com/github/smimesign#installation).

2. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.

3. Настройте Git, чтобы использовать S/MIME для подписывания фиксаций и тегов. В Git 2.19 или более поздней версии используйте команды `git config gpg.x509.program` и `git config gpg.format`:
   * Чтобы использовать S/MIME для подписывания во всех репозиториях, воспользуйтесь следующим кодом:

     ```shell
     git config --global gpg.x509.program smimesign
     git config --global gpg.format x509
     ```

   * Чтобы использовать S/MIME для подписывания в одном репозитории, воспользуйтесь следующим кодом:

     ```shell
     cd PATH-TO-REPOSITORY
     git config --local gpg.x509.program smimesign
     git config --local gpg.format x509
     ```

     В Git 2.18 или более ранней версии используйте команду `git config gpg.program`:

   * Чтобы использовать S/MIME для подписывания во всех репозиториях, воспользуйтесь следующим кодом:

     ```shell
     git config --global gpg.program smimesign
     ```

   * Чтобы использовать S/MIME для подписывания в одном репозитории, воспользуйтесь следующим кодом:

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local gpg.program smimesign
     ```

     Если вы используете ключ X.509, соответствующий вашему удостоверению вносителя фиксаций, можно начать подписывание фиксаций и тегов.

4. Если вы не используете ключ X.509, соответствующий вашему удостоверению вносителя фиксаций, выведите список ключей X.509, для которых у вас есть сертификат и закрытый ключ, с помощью команды `smimesign --list-keys`.

   ```shell
   smimesign --list-keys
   ```

5. В списке ключей X.509 скопируйте идентификатор сертификата ключа X.509, который вы хотите использовать. В этом примере идентификатором сертификата является `0ff455a2708394633e4bb2f88002e3cd80cbd76f`:

   ```shell
   $ 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
   ```

6. Чтобы задать ключ подписывания X.509 в Git, вставьте приведенный ниже текст, подставив скопированный ранее идентификатор сертификата.
   * Чтобы использовать ключ X.509 для подписывания во всех репозиториях, воспользуйтесь следующим кодом:

     ```shell
     git config --global user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

   * Чтобы использовать ключ X.509 для подписывания в одном репозитории, воспользуйтесь следующим кодом:

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

</div>

## Дополнительные материалы

* [Добавление нового SSH-ключа в ваш аккаунт GitHub](/ru/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).
* [Подписание фиксаций](/ru/authentication/managing-commit-signature-verification/signing-commits)
* [Подписывание тегов](/ru/authentication/managing-commit-signature-verification/signing-tags)