Коммит GitHub не проверен, несмотря на совпадение идентификатора ключа GPG

В командной строке я сгенерировал новую пару ключей, используя пакет github-api-signature generateKeyPair, предоставляя имя и адрес электронной почты моей учетной записи GitHub, а также случайную парольную фразу.

Я взял общедоступную часть сгенерированной пары ключей и поместил ее в свой аккаунт GitHub на странице ключей.

Я взял закрытый ключ и предоставил его фрагменту кода ниже.

Запрос на создание коммита возвращается успешно, как и программное создание PR, но когда я захожу на страницу коммитов PR, появляется окно с надписью «Непроверено» с сообщением «Подпись в этом коммите не может быть проверена. Кто-то возможно, пытается вас обмануть».

введите здесь описание изображения

Я сравнил идентификатор ключа GPG, который он предоставляет мне на этой странице, с теми, которые перечислены на моей странице ключей GitHub, и он совпадает, так почему же мой коммит отображается как непроверенный?

Пример кода:

const privateKey = '[GENERATED PRIVATE KEY]';
const passphrase = '[RANDOM PASSPHRASE FROM EARLIER]';

const author = {
  name: '[NAME THAT MATCHES GITHUB]',
  email: '[EMAIL THAT MATCHES GITHUB]',
  date: new Date().toISOString(),
};

const commitPayload: CommitPayload = {
  message: commitMessage,
  author,
  committer: { ...author },
  tree: tree.data.sha,
  parents: [branch.data.object.sha],
};

const signature = await githubApiSignature.createSignature(
  commitPayload,
  privateKey,
  passphrase,
);

const result = await got(
  `[GITHUB API URL]/repos/[USERNAME]/[REPO_NAME]/git/commits`,
  {
    protocol: 'https:',
    method: 'POST',
    body: {
      ...commitPayload,
      signature,
    },
    json: true
  },
);

person Tom    schedule 02.06.2020    source источник
comment
Можете ли вы проверить коммит из командной строки, используя git verify-commit HASH?   -  person bk2204    schedule 03.06.2020
comment
@ bk2204 вывод, который я получаю, равен gpg: BAD signature from "Name <email>" [unknown], что интересно, ключ RSA также намного короче (16 против 40 символов) для этой подписи по сравнению с той, которая была успешно создана с помощью непрограммно созданной фиксации с использованием другого ключа несколько дней назад.   -  person Tom    schedule 03.06.2020
comment
Однако ключ RSA соответствует идентификатору ключа GPG на моей странице ключей в GitHub.   -  person Tom    schedule 03.06.2020
comment
Разница в длине заключается в идентификаторе ключа и отпечатке пальца и не имеет значения. Я не знаю, почему ваш код неисправен, но, по крайней мере, GitHub и Git согласны с тем, что подпись плохая, так что вы знаете, где искать.   -  person bk2204    schedule 04.06.2020


Ответы (1)


Это было вызвано конечным \n в сообщении фиксации, которое было обрезано библиотекой, которую я использовал для создания подписи, но не мной перед отправкой POST на GitHub.

Дополнительная информация о том, как я это отладил, если это поможет кому-то еще в будущем:

Первоначально я пытался использовать библиотеку openpgp, следуя руководству по созданию и проверки отдельных подписей, и столкнулся с той же проблемой достоверности.

Зная, что подпись была проверена локально, я понял, что, должно быть, неправильно отправляю что-то в GitHub API. Git Commits API предоставляет полезные отзывы в блоке verification ответа:

verification: {
    verified: boolean
    reason: string
    signature: string
    payload: string
}

...а также немного дополнительной информации на странице документации о том, что означает каждая из причин.

Дальнейшее исследование полезной нагрузки (включая упрощение всех моих значений) привело меня к выводу, что сообщение было ошибкой.

person Tom    schedule 24.06.2020