云代码签名与 GitLab CI 的集成

这是一个关于如何使用 eSigner CodeSignTool 在 GitLab CI 上进行自动代码签名的教程。 

CodeSignTool 是构成 eSigner 一部分的安全命令行实用程序:我们的云代码签名环境使软件发布者和开发人员能够以简单的方式安全有效地进行企业代码签名。  下面的示例工作流显示了使用 eSigner 在 GitLab CI 上签名的 .NET DLL 代码。

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

马上订购

环境变量

  • USERNAME: SSL.com 帐户用户名。 (必需的)
  • 密码: SSL.com 帐号密码 (必填)
  • 凭据_ID:用于签署证书的凭据 ID。 如果 credential_id 被省略并且用户只有一个 eSigner 代码签名证书,CodeSignTool 将默认使用该证书。 如果用户拥有多个代码签名证书,则此参数为必填项。 (必需的)
  • TOTP_秘密:OAuth TOTP 秘密。 您可以访问详细信息 https://www.ssl.com/how-to/automate-esigner-ev-code-signing (必填)
  • ENVIRONMENT_NAME :“测试”或“生产”环境。 (必需的)

输入

  • 输入文件路径:要签名的代码对象的路径。 (必需的)
  • 输出目录路径:将写入签名代码对象的目录。 如果省略 output_path,则在 -file_path 中指定的文件将被签名文件覆盖。

.NET 代码 DLL 签名示例工作流

创建一个 yml 文件

将作业分组为阶段。 一个阶段的所有作业必须在下一阶段执行之前完成。

阶段: - 构建 - 签署
 

全局定义环境变量。 作业级别属性覆盖全局变量。

  • 环境变量用于使示例更具可读性。 在上面示例工作流的屏幕截图中,可以选择省略 PROJECT_NAME、PROJECT_VERSION 和 DOTNET_VERSION。 签名仍然可以继续进行这些遗漏。  
  • 在 ENVIRONMENT_NAME 下,为测试签名放置“TEST”,为实时签名放置“PROD”。
变量: PROJECT_NAME:“HelloWorld” PROJECT_VERSION:“0.0.1” DOTNET_VERSION:“3.1” ENVIRONMENT_NAME:“PROD”
 

定义 构建阶段

以下是您构建 dll 工件的工作的定义

构建点网:

 

  1. 定义作业将在哪个阶段运行。
  阶段:构建

 

  1. 放置应该使用的图像的全名。 如果需要,它应该包含注册表部分。
 图片:mcr.microsoft.com/dotnet/sdk:3.1-bullseye

 

  1. 定义应该在作业*之前*运行的脚本。 可以全局设置或按作业设置。
before_script: - mkdir -p ${CI_PROJECT_DIR}/artifacts - mkdir -p ${CI_PROJECT_DIR}/packages

 

  1. 定义 Runner 执行的 Shell 脚本。 构建 DLL 工件
脚本: - dotnet build dotnet/${PROJECT_NAME}.csproj -c Release - cp dotnet/bin/Release/netcoreapp${DOTNET_VERSION}/${PROJECT_NAME}-${PROJECT_VERSION}.dll ${CI_PROJECT_DIR}/packages/${ PROJECT_NAME}.dll

 

  1. 指定作业成功时应附加到作业的文件和目录列表。
  • 左侧工具栏上的'过期时间' 属性允许在一段时间后删除文件。 它的使用是可选的。 这就是上面示例工作流的屏幕截图未显示此属性的原因。
工件:路径:- ${CI_PROJECT_DIR}/packages/HelloWorld.dll expire_in:5 分钟
 

定义标志阶段

以下是您签署 dll 工件的工作的定义

登录dotnet-artifacts:

 

  1. 定义作业将在哪个阶段运行。
  阶段:签到

 

  1. 放置应该使用的图像的全名。 如果需要,它应该包含注册表部分。
 图片:码头:19.03.0

 

  1. 定义服务。 这类似于 `image` 属性,但会将指定的服务链接到 `image` 容器。
服务: - 码头工人:19.03.0-dind

 

  1. 为特定作业定义环境变量。
  • 在上面的屏幕截图中,sign 命令是直接在 sign 脚本中定义的,而不是在环境变量下。 乙其他方法可以使用 TravisCI 正确签名。
  变量:命令:“符号”

 

  1. 定义应该在作业*之前*运行的脚本。 可以全局设置或按作业设置。
  before_script: - mkdir -p ${CI_PROJECT_DIR}/artifacts - mkdir -p ${CI_PROJECT_DIR}/packages

 

  1. 放置由 Runner 执行的 Shell 脚本。 使用 CodeSignTool Docker Image 签署 .NET dll 工件
脚本:- docker pull ghcr.io/sslcom/codesigner:latest - docker run -i --rm --dns 8.8.8.8 --network host --volume ${CI_PROJECT_DIR}/packages:/codesign/examples --volume $ {CI_PROJECT_DIR}/artifacts:/codesign/output -e USERNAME=${USERNAME} -e PASSWORD=${PASSWORD} -e CREDENTIAL_ID=${CREDENTIAL_ID} -e TOTP_SECRET=${TOTP_SECRET} -e ENVIRONMENT_NAME=${ENVIRONMENT_NAME} ghcr.io/sslcom/codesigner:最新的 ${COMMAND} -input_file_path=/codesign/examples/${PROJECT_NAME}.dll -output_dir_path=/codesign/output

 

  1. 编写可用于指定在作业成功时应附加到作业的文件和目录列表的脚本。
工件:路径:-${CI_PROJECT_DIR}/artifacts/${PROJECT_NAME}.dll expire_in:1 天

 

  1. 指定应从中加载工件的早期阶段的作业名称列表。
依赖项:- 构建-dotnet

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

马上订购

启动构建阶段

创建存储库

请参阅 Gitlab 上的命令行说明,如下面的屏幕截图所示

推送你的文件夹

通过单击执行此操作 终端 在菜单上,然后是 新航站楼.

在终端上键入推送脚本以推送项目 

单击构建按钮

触发管道后,继续构建

检查构建是否成功  

启动标志阶段

继续签署工件

确认代码签名是否成功

您现在可以下载签名文件

你可以参考 SSL.com Github 存储库,其中包含 docker 镜像的源代码并描述了如何使用它: https://github.com/SSLcom/ci-images 

Gitlab CI 流水线示例

查看我们创建的示例 Gitlab CI 管道 github.com/SSLcom/codedesigner-gitlabci-sample

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

需要定制解决方案? 

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

订阅 SSL.com 的时事通讯

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

保持信息灵通和安全

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

我们希望收到您的反馈

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