云代码签名与 GitHub Actions 的集成

本指南文章演示了如何将 eSigner 与 GitHub Actions 集成以在持续集成/持续交付 (CI/CD) 设置中进行自动代码签名。

eSigner 是我们基于云的签名平台,受到全球软件开发人员的信赖,无需 USB 令牌或其他专用硬件即可进行企业代码签名。  eSigner 的组件之一是 CodeSignTool:一种隐私驱动的命令行实用程序,对于想要自动化代码签名的开发人员来说非常有效。  以下部分演示了如何使用 eSigner CodeSignTool 在 GitHub Actions 上签署 Java 代码 (Maven)。

SSL.com的 EV 代码签名 证书通过最高级别的验证帮助保护您的代码免受未经授权的篡改和破坏,并且只需 $ 249每年。 您也可以 大规模使用您的 EV 代码签名证书 使用 eSigner 在云中。

马上订购

用法

- 姓名: 使用 CodeSignTool 签署工件

  用途: sslcom/actions-codedesigner@develop

  使用:

  •      CodeSignTool 命令:

     – get_credential_ids:输出与用户关联的 eSigner 凭证 ID 列表。

     – credential_info:输出与凭证 ID 相关的密钥和证书信息。

     – sign:签名和时间戳代码对象。

     – batch_sign:使用一个 OTP 对多个代码对象进行签名和时间戳。

     – hash:预先计算哈希值,以供以后与 batch_hash_sign 命令一起使用。

     – batch_sign_hash: 用 hash 命令预先计算的签名 hash(es)。

        命令: 签署

 

  • SSL.com 帐户用户名。

         username: ${{secrets.ES_USERNAME}}

  •  SSL.com 帐户密码。

         password: ${{secrets.ES_PASSWORD}}

  • 用于签署证书的凭据 ID。

         credential_id: ${{secrets.CREDENTIAL_ID}}

         totp_secret: ${{secrets.ES_TOTP_SECRET}}

  • 要签名的代码对象的路径。

          file_path: ${GITHUB_WORKSPACE}/test/src/build/HelloWorld.jar

  • 将写入签名代码对象的目录。

          output_path: ${GITHUB_WORKSPACE}/artifacts

 

输入

  • 用户名: SSL.com 帐户用户名。 (必需的)
  • 密码: SSL.com 帐号密码 (必填)
  • 凭据_id:用于签署证书的凭据 ID。 如果 credential_id 被省略并且用户只有一个 eSigner 代码签名证书,CodeSignTool 将默认使用该证书。 如果用户拥有多个代码签名证书,则此参数为必填项。 (必需的)
  • 秘密:OAuth TOTP 秘密。 您可以访问详细信息 https://www.ssl.com/how-to/automate-esigner-ev-code-signing (必填)
  • 文件路径:要签名的代码对象的路径。 (必需的)
  • 输出路径:将写入签名代码对象的目录。 如果省略 output_path,则在 -file_path 中指定的文件将被签名文件覆盖。

Java 代码 (Maven) JAR 签名示例工作流

准备工作流的组件

  1. 在你的编辑器上创建一个 Github 文件夹。 在文件夹中包含工作流,并在文件夹下创建一个 yml 文件。
    1. 命名您的项目和所涉及的工作流程类型
    名称:Maven 构建和签名
     
    1. 推送时触发此工作流
    上:推
     
    1. 创建环境变量
    • 环境变量用于使示例更具可读性。 在上面示例工作流的屏幕截图中,可以选择省略 PROJECT_NAME、PROJECT_VERSION 和 MAVEN_VERSION。 即使有这些遗漏,签名仍然可以继续进行。
    环境:PROJECT_NAME:HelloWorld PROJECT_VERSION:0.0.1 MAVEN_VERSION:3.8.5 JAVA_VERSION:17
     
    1. 在编辑器上定义工作
    工作:构建和签名罐子:
     
    1. 在 Ubuntu Runner 上运行作业
        运行:ubuntu-latest
     
    1. 创建一个名称。 当工作流运行时,这是记录的名称。
      名称:Java 上的 CodeSigner 和 Maven
     

概述检查源代码、设置 Java 和 Maven 环境以及创建工件目录的步骤。

  1)签出源代码,以便工作流可以访问它。

   步骤: - 使用:actions/checkout@v2
 

  2) 设置工作流使用的 Java 和 Maven 环境。

    - 名称:安装 Maven 和 Java 使用:s4u/setup-maven-action@v1.3.1 with: java-version: '${{env.JAVA_VERSION}}' maven-version: '${{env.MAVEN_VERSION}}'

 

      3)创建工件目录来存储签名和未签名的工件文件

 - 名称:创建目录外壳:bash 运行:| mkdir ${GITHUB_WORKSPACE}/artifacts mkdir ${GITHUB_WORKSPACE}/packages

 

      4) 构建一个 Maven 项目或解决方案及其所有依赖项。

      创建jar文件后,复制到'packages'文件夹进行签名

  • 在这个书面签名示例工作流中,创建了多个项目类型。 这就是为什么通过创建子文件夹来保存不同项目类型的文件的原因。 为 Java 项目创建了一个名为“java”的子文件夹。 在上面的演示屏幕截图中,没有必要创建一个名为“java”的子文件夹,因此它没有包含在脚本中。
 - 名称:构建 Java 项目外壳:bash 运行:| mvn clean install -f java/pom.xml cp java/target/${{env.PROJECT_NAME}}-${{env.PROJECT_VERSION}}.jar ${GITHUB_WORKSPACE}/packages/${{env.PROJECT_NAME}}。罐
 

概述签名和上传作业的步骤

  1. 签名作业是使用 CodeSignTool 对创建的 JAR(工件)文件进行签名的步骤。
 - 名称:Sign Artifact 使用:sslcom/actions-codesigner@develop with:

           签名和时间戳代码对象。

命令:符号

           SSL.com 帐户用户名。

用户名:${{secrets.ES_USERNAME}}

           SSL.com 帐户密码。

密码:${{secrets.ES_PASSWORD}}

           用于签署证书的凭据 ID。

credential_id:${{secrets.CREDENTIAL_ID}}

           OAuth TOTP 秘密 (https://www.ssl.com/how-to/automate-esigner-ev-code-signing)

totp_secret:${{secrets.ES_TOTP_SECRET}}

           要签名的代码对象的路径。 (DLL、JAR、EXE、MSI 文件 vb…)

  文件路径:${GITHUB_WORKSPACE}/packages/${{env.PROJECT_NAME}}.jar

           将写入签名代码对象的目录。

输出路径:${GITHUB_WORKSPACE}/artifacts

 

  1. 上传作业是上传工作流中的工件的步骤,允许您在工作流之间共享数据并在工作流完成后存储数据
 - 名称:上传签名文件使用:actions/upload-artifact@v2 with:名称:${{env.PROJECT_NAME}}.jar 路径:./artifacts/${{env.PROJECT_NAME}}.jar
 

从 Github Marketplace 获取构建工件上传器

查看您的编码脚本

buld、sign 和 upload 作业的所有编码脚本应如下图所示。 确保更正脚本中的任何错误,例如拼写错误或错误的换行符,以便签名过程顺利进行。

SSL.com的 EV 代码签名 证书通过最高级别的验证帮助保护您的代码免受未经授权的篡改和破坏,并且只需 $ 249每年。 您也可以 大规模使用您的 EV 代码签名证书 使用 eSigner 在云中。

马上订购

定义您的环境变量

转到您的 Github 帐户上的项目位置。 点击 行动 标签。 点击 新的存储库机密 按钮放置签名代码所需的每个环境变量的值。

在命令行上创建一个新的存储库

前往 Github 上项目所在的位置,复制 push 命令的每个组件。

推送项目

在代码编辑器中包含每个推送命令行。 完成后,代码将自动推送到 Github。

等待使用 eSigner CodeSignTool 对工件进行签名

上传签名文件

点击签名文件上传。

注意:确保更正脚本中的印刷错误或错误的换行符,以便签名过程顺利进行。

Github 操作管道示例


查看我们创建的示例 Github Actions 管道 github.com/SSLcom/codedesigner-github-sample  

其他 CI/CD 远程签名集成指南

需要定制解决方案? 

凭借我们的专业知识和五星级支持人员,我们已准备好并愿意与您合作制定定制解决方案或企业级大批量签约折扣。 填写下面的表格,我们会与您联系。

订阅 SSL.com 的时事通讯

不要错过SSL.com上的新文章和更新

保持信息灵通和安全

SSL.com 是网络安全领域的全球领导者, PKI 和数字证书。注册以接收最新的行业新闻、提示和产品公告 SSL.com.

我们希望收到您的反馈

参加我们的调查,让我们知道您对最近购买的想法。