"错误:SignerSign()失败。" (-2147023673 / 0x800704c7)

时间:2017-06-17 18:48:35

标签: windows jenkins signtool

在我们的buildserver 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服务作为具有管理员权限的简单用户(而不是本地系统)在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个字符的路径长度限制。烦!但是我们解决了这个问题,有时候错误仍然存​​在。

4 个答案:

答案 0 :(得分:2)

我也遇到了这个问题。我能够通过运行Signtool.exe复制Jenkins之外的错误,但是当出现令牌密码的提示时,,单击取消。您将收到相同的错误

我有一个C程序,它会监视Symantec提示并自动输入toke密码。但Jenkins显然没有在与我的密码帮助程序相同的上下文中运行Signtool.exe。所以我然后编辑了运行Signtool.exe的程序来运行密码帮助程序。它仍然没有好处。然后我意识到可能是Jenkins如何在节点上运行的问题。我让Jenkins节点运行服务。 一旦我停止了服务,并通过直接在命令行上运行java命令进行连接,就可以了!

现在我知道,如果我要在Windows节点上运行signtool,请确保通过在命令行(通过计划任务)运行而不是服务来连接节点。这改变了Jenkins运行的上下文,允许SignTool和Token Prompt运行良好。

答案 1 :(得分:1)

我遇到了同样的问题,并通过安装最新的Windows 10 SDK(即10.0.15063.0

)解决了这个问题

答案 2 :(得分:0)

EV使用eToken

与Jenkins协同设置

使用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

也许商店里还有更多的条目。要找到合适的人,请查看您的certifcate指纹。 jsign的alias参数所需的别名是示例中以“te-318f4 ....”开头的字符串。

需要有关此部分的更详细帮助吗?请查看Trustzone

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

答案 3 :(得分:0)

我省略了签字:

 /tr http://tsa.starfieldtech.com