GitHub 尽管匹配 GPG 密钥 ID,但提交未验证

GitHub commits not verified despite matching GPG Key ID

在命令行上,我使用 the github-api-signature package's generateKeyPair 函数生成了一个新的密钥对,提供了我的 GitHub 帐户的名称和电子邮件以及随机密码。

我把生成的密钥对的public部分取出来放在in my GitHub account on the keys page.

我拿了私钥并将其提供给下面的代码片段。

创建提交 returns 的请求与 PR 的编程创建一样成功,但是当我访问 PR 的提交页面时,有一个框显示 'Unverified' 和消息 "The signature in this commit could not be verified. Someone may be trying to trick you."

我将它在此页面上提供给我的 GPG 密钥 ID 与我的 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
  },
);

这是由提交消息中的尾随 \n 引起的,该消息被我用来生成签名的库修整,但在发布到 GitHub.[=15= 之前我没有修整]

有关我如何调试它的更多信息,它是否对其他人有帮助:

最初我尝试在 the guide for creating and verifying detached signatures 之后直接使用 openpgp 库,但遇到了同样的有效性问题。

知道签名是在本地验证的,我知道我一定是错误地向 GitHub API 发送了一些东西。 Git Commits API 在响应的 verification 块中提供了一些有用的反馈:

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

...以及文档页面中关于每个原因的含义的更多信息。

对负载的进一步调查(包括简化我的所有值)让我发现消息有问题。