错误:签名者签名()失败。 (-2147023673/0x800704c7)

10

在我们的构建服务器 Jenkins 上使用 signtool 进行代码签名时,会显示以下错误消息:

Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-2147023673/0x800704c7)
SignTool Error: An unexpected internal error has occurred.

我们在USB令牌上使用EV代码签名证书,所有工具都是实际可用的最新版本。

有什么想法吗?


在同一台机器上使用相同的构建任务并手动运行它没有问题(如下面提到的用户),该机器与jenkins运行的环境/目录相同。

Jenkins服务作为简单用户以管理员权限(而不是Local System)在Windows 10专业版VM上运行。

有关更多详细信息,请参阅Jenkins日志中的摘录:

  Signiere FlinkySchule.FormularEditor.exe:
  Verbindung zu Token auf- bzw. abbauen
  ***** code signing *****
  Aktueller Pfad des signtool:
  c:\JW\FS\Production\Deployment\Tools\signtool\kits
  Zu signierende Datei:
  c:\JW\FS\Production\Application\Assemblies\FlinkySchule.FormularEditor\bin\Release\\FlinkySchule.FormularEditor.exe
  The following certificate was selected:
      Issued to: Dirk W.

      Issued by: GlobalSign CodeSigning CA - SHA256 - G3

      Expires:   Fri Apr 03 15:58:51 2020

      SHA1 hash: 4187Cxyxyxyxyxyxyxyxyxyxyx7978C4


  Done Adding Additional Store
EXEC : error information: "Error: SignerSign() failed." (2147023673/0x800704c7) [c:\JW\FS\Production\Application\Assemblies\FlinkySchule.FormularEditor\FlinkySchule.FormularEditor.csproj]
EXEC : SignTool error : An unexpected internal error has occurred. [c:\JW\FS\Production\Application\Assemblies\FlinkySchule.FormularEditor\FlinkySchule.FormularEditor.csproj]

一个问题是整个路径长度: 即使在2017年,您仍然会遇到260个字符的路径长度限制。令人烦恼!但我们解决了这个问题,错误有时仍会发生。



同样,当我通过一个构建脚本(不是Jenkins)运行signtool时,我会遇到这个错误,但在命令行手动操作时却无法复现。 - StayOnTarget
6个回答

2

使用eToken和Jenkins进行EV代码签名

找到了一个解决方案,使用jsign

java -jar jsign-2.0.jar --keystore .\eToken.cfg --alias %yourCertAlias% --storetype PKCS11 --tsaurl http://rfc3161timestamp.globalsign.com/advanced --tsmode RFC3161 --storepass %tokenPassword% %file2sign%

eToken.cfg:

name=eToken
library=c:\WINDOWS\system32\eTPKCS11.dll

使用Java Keytool获取证书别名

keytool -list -keystore NONE -storetype PKCS11 -providerclass sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg

这应该输出类似于以下内容:
Keystore-Typ: PKCS11
Keystore-Provider: SunPKCS11-eToken

Keystore enthält 1 Eintrag

te-318f471f-9a0e-4101-bf45-96a656cc2306, PrivateKeyEntry,
Zertifikat-Fingerprint (SHA1): 
41:87:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:X:XX:XX:XX:XX:79:78:C4

也许商店里还有其他条目。要找到正确的,请查看您证书的指纹。jsign别名参数所需的别名是以“te-318f4 ...”开头的字符串。

需要更详细的帮助?请参阅Trustzone

如果您有兴趣了解我们如何在单独的构建机器上使用一个eToken USB设备进行自动化构建过程,请告诉我。


2
我也遇到了这个问题。我通过运行Signtool.exe在Jenkins外部复制错误,但是当提示输入令牌密码时,点击取消。你会得到相同的错误。
我有一个C程序,可以监视Symantec提示,并自动输入令牌密码。但是显然Jenkins没有在与我的密码助手程序相同的上下文中运行Signtool.exe。所以我编辑了我的运行Signtool.exe的程序,以便同时运行密码助手程序。但还是不好用。然后我意识到,也许问题在于Jenkins在节点上的运行方式。我让Jenkins节点运行服务。一旦我停止了服务,并直接在命令行上运行java命令连接,它就起作用了!
现在我知道了,如果我要在Windows节点上运行signtool,请确保节点通过命令行(通过计划任务)连接,而不是服务。这将更改Jenkins运行的上下文,从而使SignTool和令牌提示能够很好地协作。

你能提供一些关于如何将其作为计划任务工作的细节吗?如果我通过浏览器启动Jenkins,我就能让它工作。我仍然会被令牌软件提示输入密码,但最终构建成功了。但是,我尝试使用java命令(而不是jnlp文件)通过计划任务启动它时,没有提示并出现了相同的错误。任务以相同的帐户、最高权限等方式运行。 - Adam Marcionek
我终于让它工作了。在启动jar文件时,我使用了“-workdir”选项,但没有起作用。删除该选项,并使用“启动位置”字段来指定工作目录,这样就可以正常工作了。具体的操作说明可以在这里的维基页面找到。 - Adam Marcionek
我们刚刚遇到了这个问题。我们的Bamboo代理人登录的用户是错误的,所以在正确的用户上解锁密钥显然没有任何效果。请确保您的服务以正确的用户运行。 - undefined

1

我遇到了同样的问题并通过安装最新的Windows 10 SDK(版本为10.0.15063.0)解决了它。


在我的端上,使用最新的SDK 10.0.16299.0,我仍然遇到了这个错误。在此错误发生后,令牌被“关闭”,我需要触发手动签名以重新进入令牌对话框输入密码。 - Markus
即使我确保使用的是最新版本,问题仍然存在。但我可以想象对于一些非常旧的signtool版本,这可能是原因。 - StayOnTarget

1
我省略了副署:
 /tr http://tsa.starfieldtech.com

0
确保您的CI机器已登录为正确的用户(您使用令牌解锁的用户)。例如,我们使用SafeNet身份验证客户端。在机器启动后,我们登录令牌一次。后来有人重新安装了处理我们签名的Bamboo代理,但没有设置服务以使用正确的用户登录,因此对于该用户,令牌未登录。

0

我必须指定用于签名的证书

/n "My Certificate Name"

编辑:抱歉我的错误代码不同,但是谷歌把我带到了这里,所以可能仍然有帮助。(-2146435071/0x80100001)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接