1

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

我将生成的密钥对的公共部分放入我的 GitHub 帐户中的密钥页面

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

创建提交的请求与 PR 的编程创建一样成功返回,但是当我访问 PR 的提交页面时,有一个框显示“未验证”,并显示消息“无法验证此提交中的签名。有人可能是想骗你。”

在此处输入图像描述

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

1 回答 1

1

这是由提交消息中的尾随引起的\n,该消息由我用来生成签名的库修剪,而不是在发布到 GitHub 之前由我修剪。

关于我如何调试它的更多信息,如果它可以帮助其他人进一步下线:

最初我尝试直接按照创建和验证分离签名的指南使用 openpgp 库,并面临同样的有效性问题。

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

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

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

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

于 2020-06-24T15:37:35.700 回答