让我们了解如何使用WindowsSDK(signtool)和代码签名证书在Windows上对应用程序进行签名。本手册假设您已准备好代码签名证书,并在Windows操作系统上安装了WindowsSDK开发环境。请从Microsoft网站下载适用于您Windows系统的SDK,例如适用于Windows10的Windows软件开发工具包(SDK)。
代码签名证书(OV和EV)将不再以其他方式颁发,只能存储在令牌中。您无法再以PFX文件的形式获取代码签名证书!
使用Signtool
Signtool.exe是一个使用代码签名证书对应用程序进行签名的程序。安装WindowsSDK后,可以通过命令行使用它。要对应用程序进行签名,您需要了解基本参数,以便能够使用正确的证书和设置正确调用应用程序签名。
签名实际上是通过命令行进行的,并且证书只需要存储在给定计算机上的文件中(它没有安装在任何地方)。
签名的基本参数(命令)如下:
signtool命令/参数
在命令中,使用Sign进行签名,并使用Verify验证文件的签名。Timestamp命令用于插入时间戳,但您也可以在签名文件时执行此操作。
有用的参数:
/f SignCertFile–如果您使用PFX文件进行签名,此命令将指向其位置。现在无法再以PFX格式获取代码签名证书。
/fd–指定哈希签名算法。默认为SHA-1,不会受到信任,因此需要使用SHA256,即/fdSHA256。
/s StoreName–如果使用证书存储区,请指定要使用的证书存储区。默认值为My。
/t URL–添加时间戳及其链接。时间戳服务器的URL如下。
/td-时间戳中的哈希(摘要)算法。至少选择sha256或更高版本。
/fd-哈希(摘要)算法。至少选择sha256或更高版本。
您可以在Microsoft网站上或通过输入命令“signtoolsign/?”找到完整的文档。
例如,整个文件签名命令可能如下所示:
SignTool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
务必使用时间戳。即使用于签名的证书过期,它也能确保已签名应用程序的可信度。这一点非常重要,因为您无需重新签名较旧的应用程序(通常在代码签名证书过期两年后),从而避免它们失去信任。如果您在签名时使用时间戳,并且证书有效,则该应用程序将来仍然有效。
还有更多服务器提供时间戳;我们建议使用DigiCert的时间戳服务器:http://timestamp.digicert.com/
该服务器在端口80上没有网站,因此通过浏览器访问它是没有意义的(您将看不到任何内容)。
从代码签名(PFX)过渡到使用令牌签名:签名时无需进行任何更改。如果您习惯使用PFX文件签名,则可以使用指向StoreName的链接(参数/sMy)。Safenet实用程序会处理所有操作。
证书存储证
书可以存储在多个位置(多个存储库中),并且您可以通过多种方式“调用”它。以前可以将证书保存为PFX文件,但现在不再可行。任何人都可以窃取您的PFX文件,即使PFX受密码保护,这仍然会带来很大的安全风险(密码通常很弱)。PFX特别适用于S/MIME证书备份或Web应用。
存储代码签名证书的一种常见方法是将其存储在令牌中,然后根据证书中的主题进行调用。此方法安全可靠,并且与之前使用PFX签名的方式基本相同。如果没有私钥(私钥无法从令牌中导出),证书将失效,因此不可能被滥用;如果密码输入错误五次,令牌将被阻止。
然后,使用存储库的签名需要/nSubjectName参数:
signtool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
或者您可以选择默认存储库My,签名SW将自动找到证书本身:
signtool sign /s My /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
签名验证
现在,您可以对应用程序进行签名,并且已经为其提供了第一个可信签名。现在您可能想知道如何检查您的签名。一种检查方法是使用signtool:
signtool verify C:\test.exe
通过在Windows资源管理器中查看文件属性来检查会更容易。您可以“剖析”签名细节,直至所用证书的详细信息。