关于 GitHub Apps 私钥
创建 GitHub App 后,需要生成一个私钥,以便作为应用程序本身向 GitHub Enterprise Server API 发出请求。 例如,需要一个私钥来对 JSON Web 令牌 (JWT) 进行签名才能请求安装访问令牌。 有关详细信息,请参阅“为 GitHub 应用生成 JSON Web 令牌 (JWT)”。
您可以创建多个私钥,然后轮流使用,以防某个私钥被盗或丢失造成停工。 要验证私钥是否与公钥匹配,请参阅“验证私钥”。
私钥不会过期,而是需要手动撤销。 有关如何撤销私钥的详细信息,请参阅“删除私钥”。
必须确保 GitHub Apps 私钥安全。 有关详细信息,请参阅“存储私钥”。
生成私钥
要生成私钥:
- 在 GitHub 上任意页的右上角,单击你的个人资料照片。
- 导航到你的帐户设置。
- 对于由个人帐户拥有的应用,请单击“设置”****。
- 对于组织拥有的应用:
- 单击“你的组织”。
- 在组织右侧,单击“设置”。
- 在左侧边栏中,单击“ 开发人员设置”。
- 在左侧边栏中,单击“GitHub Apps”。
- 在要为其生成私钥的 GitHub App 旁边,单击“编辑”。
- 在“私钥”下,单击“生成私钥”。
- 您将看到一个以 PEM 格式下载至您的计算机的私钥。 确保将此文件存储下来,因为 GitHub 仅存储密钥的公共部分。 有关安全存储密钥的详细信息,请参阅“存储私钥”。
注意:如果你使用的库需要特定文件格式,你下载的 PEM 文件将采用 PKCS#1 RSAPrivateKey
格式。
验证私钥
GitHub Enterprise Server 使用 SHA-256 哈希函数为每对私钥和公钥生成指纹。 您可以生成私钥指纹,然后与 GitHub Enterprise Server 显示的指纹相比较,以验证私钥是否与 GitHub Enterprise Server 上存储的公钥匹配。
要验证私钥:
-
在 GitHub App 设置页面的“私钥”部分,查找要验证的私钥和公钥对的指纹。 有关详细信息,请参阅“生成私钥”。
-
使用以下命令在本地生成私钥指纹 (PEM):
openssl rsa -in PATH_TO_PEM_FILE -pubout -outform DER | openssl sha256 -binary | openssl base64
-
比较本地生成的指纹结果与 GitHub Enterprise Server 中显示的指纹。
删除私钥
可以通过删除密钥来删除丢失或泄露的私钥,但在删除现有密钥之前,必须先重新生成新密钥。
- 在 GitHub 上任意页的右上角,单击你的个人资料照片。
- 导航到你的帐户设置。
- 对于由个人帐户拥有的应用,请单击“设置”****。
- 对于组织拥有的应用:
- 单击“你的组织”。
- 在组织右侧,单击“设置”。
- 在左侧边栏中,单击“ 开发人员设置”。
- 在左侧边栏中,单击“GitHub Apps”。
- 在要删除私钥的 GitHub App 旁边,单击“编辑”。
- 在“私钥”下,在要删除的私钥右侧,单击“删除”。
- 出现提示时,单击“删除”确认要删除私钥。 如果 GitHub App 只有一个密钥,则在删除旧密钥之前,需要生成一个新密钥。 有关详细信息,请参阅“生成私钥”。
存储私钥
私钥是 GitHub App 最有价值的一个机密。 请考虑将密钥存储在密钥保管库中(例如 Azure Key Vault),并将其设置为仅签名。 这有助于确保不会丢失私钥。 将私钥上传到密钥保管库后,就无法从中读取它。 它只能用于对内容进行签名,对私钥的访问由基础结构规则决定。
或者,可以将密钥存储为环境变量。 此方法不如将密钥存储在密钥保管库中强大。 如果攻击者获得了对环境的访问权限,他们就可以读取私钥,并作为 GitHub App 获得永久身份验证。
即使代码存储在专用存储库中,也不应在应用中对私钥进行硬编码。
有关详细信息,请参阅“创建 GitHub 应用的最佳做法”。