bg-tutorials

如何使用代码签名证书签名 EXE 文件?

签署 Exe 文件

如果您要开发或发布 Windows 软件,了解如何签署 EXE 文件可确保您的应用程序值得信赖,并且不会出现安全警告。代码签名可验证可执行文件的真实性和完整性,向用户保证软件来源合法,未被篡改。如果没有有效的数字签名,Windows 可能会阻止应用程序或显示安全警告,从而难以获得用户的信任。

本文介绍了如何签署可执行文件,包括从要求和分步说明到验证以及签署 EXE 文件的好处等各个方面。

本指南结束时,你将知道如何获取和安装代码签名证书,使用Microsoft 的signtool.exe来签名EXE文件,以及验证可执行文件是否已正确签名。让我们开始吧。


签署 EXE 或应用程序前的要求

在签署EXE文件之前,您必须拥有正确的工具和设置。代码签名不仅仅是应用数字签名。它需要有效的证书、安全的密钥存储和适当的签名软件。下面,我们将逐步介绍关键要求,包括从选择正确的证书到设置必要的软件等各个方面。

1.获取代码签名证书

首先,您需要一个由可信的证书颁发机构(CA)颁发的代码签名证书,如 DigiCert 或 Sectigo.该证书可验证您作为软件发布者的身份。

自 2023 年 6 月 1 日起,所有代码签名证书都必须将私钥存储在安全的硬件上。因此,您不能在本地计算机上生成或保存私钥。 相反,它必须存储在经 FIPS 140-2 Level 2+ 认证的设备上,如SafeNet USB 令牌 或硬件安全模块 (HSM)。

DigiCert 和GoGetSSL 代码签名证书的有效期为一年,无论您使用的是 CA 提供的硬件令牌还是自己支持的硬件设备。Sectigo/Comodo证书采用不同的模式, 只有在使用自己的硬件模块时才允许使用多年计划(最长三年)。

您选择的证书类型会影响您处理密钥存储的方式:

  • EV 代码签名证书总是附带一个由 CA签发的SafeNetUSB 令牌。这个物理设备保存着你的私人密钥,每次签署 EXE 文件时都需要它。
  • 标准代码签名证书不包括 USB 令牌。相反,你可以使用基于云的签名服务(如DigiCert 的 KeyLocker),或者在 CA 允许的情况下将私钥存储在自己的HSM上。

2.设置签名环境

获得证书和安全存储设备后,您需要合适的工具。 Windows SDK(软件开发工具包)包括必要的签名实用程序signtool.exe,你将用它来应用数字签名。如果尚未安装,可从微软官方网站下载最新版本。

Signtool 安装程序

如果使用 EV 代码签名证书,还需要安装SafeNet Authentication Client 软件。这样,系统就能与 USB 令牌通信,并安全地检索私钥。如果您使用 HSM 签名,请确保设备已正确设置,并且您的证书可从签名环境中访问。

安全网

您还必须在计算机上拥有管理员权限。代码签名需要提升权限,因此在执行任何签名命令前,请以管理员身份运行命令提示符或PowerShell。


3.时间戳为何重要

签名过程的一个关键部分是时间戳,它能确保数字签名在证书过期后仍然有效。如果没有时间戳,一旦证书过期,Windows 就会将已签名的 EXE 视为不可信任的。

签署文件时,签署工具会联系时间戳服务器,记录签署的确切日期和时间。这证明你的文件是在证书仍然有效的情况下签署的。大多数 CA 都免费提供时间戳服务。如果不添加时间戳,用户就会看到签名过期的警告,使应用程序显得不安全。


4.签署前的最后准备工作

在签署 EXE 之前,请仔细检查签署工具、驱动程序和安全存储设备是否设置正确。如果使用 HSM,请检查密钥是否可访问并正确配置。如果使用的是 SafeNet USB 令牌,请确保其已插入且 SafeNet 身份验证客户端正在运行。

一切就绪后,您就可以签署 EXE 文件了。这个过程最初可能看起来很复杂,但按照这些步骤操作,可以确保您的软件受到 Windows 的信任,防止出现安全警告,并让用户放心安装应用程序。


签署 EXE 文件分步指南

下面是关于签署 EXE 的最新详细指南,现在必须将 EXE 存储在硬件安全模块(HSM)或 USB 令牌中,以增强安全性。

步骤 1:插入 HSM 或 USB 令牌

在签署 EXE 之前,必须连接包含代码签名证书和私钥的硬件令牌或 HSM。认证机构现在要求所有代码签名证书都存储在经 FIPS 140-2 Level 2 批准的设备上,如 SafeNet USB 令牌或YubiKey HSM。

连接硬件令牌的步骤:

  1. 将 HSM 或 USB 令牌插入Windows 机器。
  2. 如果出现提示,请安装必要的驱动程序(大多数设备会自动安装)。
  3. 确保已安装SafeNet Authentication Client或任何所需的 HSM 软件。

如果使用基于云的 HSM(如Azure Key Vault 或 AWS CloudHSM),请确保在继续之前正确设置了凭据。


第 2 步:以管理员身份打开命令提示符

由于签名需要系统权限,因此必须使用具有管理权限的Command Prompt (cmd.exe)或PowerShell。

以管理员身份打开命令提示符的步骤:

  1. 单击 “开始 “菜单并输入cmd。
  2. 右键单击 “命令提示符“,选择 “以管理员身份运行“。

或者,如果您更喜欢PowerShell,也可以按照相同的步骤输入PowerShell。


步骤 3:找到 SignTool

SignTool是Windows SDK 中包含的微软工具,是签署可执行文件所必需的。

在系统中查找 SignTool:

SignTool 的位置取决于所安装的Windows SDK版本。您可以在以下位置找到它:

C:/Program Files (x86)/Windows

Kits\10\bin\10.0.22621.0\x64\signtool.exe

如有需要,请将10.0.22621.0替换为已安装的 SDK 版本。

Signtool 路径

第 4 步:使用 SignTool 签名 EXE

一切准备就绪后,就可以使用SignTool 签名 EXE 文件了。下面是使用时间戳签名的正确命令示例。 请相应调整。

signtool sign /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 /a "C:\path\to\yourfile.exe"

命令解释:

  • /tr http://timestamp.digicert.com– 指定 RFC 3161 时间戳服务器 URL(用 CA 服务器替换)。
  • /td SHA256– 将 SHA-256 设置为时间戳摘要算法。
  • /fd SHA256– 将 SHA-256 指定为文件摘要算法(现代 Windows 版本要求使用此算法)。
  • /a– 自动选择正确的代码签名证书。
  • “C:\path\to\yourfile.exe”– 替换为 EXE 文件的实际路径。

步骤 5:输入密码(如需要)

如果 HSM 或 USB 令牌要求进行身份验证,则会出现一个弹出窗口,要求输入密码或 PIN 码。

下一步该怎么做

  • 输入 SafeNet 令牌(或任何其他 HSM)的密码。
  • 如果您有多个证书,SignTool 可能会要求您选择正确的证书。

注意:如果使用基于云的 HSM,可能需要通过 API 凭据或安全 PIN 进行身份验证。


验证已签名的 EXE 文件

签署 EXE 后,请确认签名已正确应用并包含时间戳。以下是验证方法:

1.检查文件属性

  1. 在计算机上找到已签名的 EXE 文件。
  2. 右键单击文件并选择属性。
  3. 转到数字签名选项卡。
  4. 如果签名成功,你会看到签名和时间戳。单击 “详细信息 “确认信息中是否写有 “此数字签名OK”。

2.使用 Poweshell 进行验证

要进行更深入的检查,可以使用 Windows Powershell。

  1. 打开PowerShell(Win + X → PowerShell)。
  2. 运行命令:

    Get-AuthenticodeSignature "C:\Windows\System32\cmd.exe"

    Powershell 签名验证

用你的 exe 文件替换 “cmd/exe”。

这将显示签名的详细信息,包括证书链和时间戳。如果签名无效或缺失,Windows 会将其标记出来。

3.在另一个系统上测试

为进一步确保安全,请尝试在另一台计算机上下载并运行已签名的 EXE。如果一切正常,Windows 应该会将其识别为受信任的应用程序,而不会显示安全警告。通过这些步骤,您可以确保您的 EXE 已正确签名,并可安全分发。


为什么要签署 EXE 文件?

Windows 应用程序签名不仅关系到安全性,还关系到信任、保护和确保软件顺利运行。以下是签署可执行文件的几个理由:

  • 用户信任签名软件。如果 EXE 文件没有签名,Windows 就会发出安全警告,有些系统可能会完全阻止它。来自可信证书颁发机构的经过验证的签名可以让用户放心,文件是安全的,没有被篡改过。
  • 它可以防止未经授权的修改。一旦签名,EXE 就像一个密封包装。如果有人试图修改它,无论是注入恶意软件还是修改代码,都会破坏签名,Windows 就会将文件标记为不可信任。
  • 它能减少 Microsoft SmartScreen 警告。SmartScreen 会对未签名的软件咄咄逼人,它会显示警告,让用户在安装时犹豫不决。对 EXE 进行签名,尤其是使用扩展验证 (EV) 代码签名证书,可大大减少这些警告,使安装更加顺利。
  • 它对企业分发至关重要。许多企业环境禁止未签名的软件在其网络上运行。经过签名的 EXE 符合安全策略,可确保顺利部署。
  • 时间戳使签名保持有效。如果没有时间戳,签名就会在证书过期时失效。有了时间戳,即使过期,签名也会保持有效,确保软件继续运行。

自信地签署您的 EXE – 获取代码签名证书

知道如何签署 EXE 文件并保护软件免受安全警告后,下一步就是获得适当的代码签名证书。无论您是独立开发人员还是企业,签署 EXE 都能确保信任、顺利安装和防止篡改。如果没有有效的签名,Windows 将标记您的软件,使用户难以安装和运行。

在 SSL Dragon,我们提供来自DigiCert、Sectigo 和GoGetSSL 等顶级供应商的OV 和 EV 代码签名证书。需要简单的解决方案?选择个人或组织验证。想要更高的信誉和更少的 SmartScreen 警告?扩展验证是不错的选择。任君选择,自信地签署您的软件,让安全警告成为过去。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.