在我们的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个字符的路径长度限制。烦!但是我们解决了这个问题,有时候错误仍然存在。
答案 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