标签: signtool

Signtool错误:没有找到符合Windows Store应用程序所有给定条件的证书?

所以,我正在尝试使用我拥有的pfx文件签署Windows 8 appx包.我正在使用这样的命令:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
Run Code Online (Sandbox Code Playgroud)

从此,我得到:

SignTool错误:未找到符合所有给定条件的证书.

我没有遇到什么"标准"?这仅用于测试,因此这些是自签名证书.我已经尝试导入密钥然后签名,但它总是会导致相同的错误.我该如何解决?

signtool windows-8 windows-store-apps appx

263
推荐指数
14
解决办法
27万
查看次数

找不到Visual Studio SignTool.exe

我已经完成了我在Visual Studio 14.0中创建的应用程序,但是当我尝试发布该程序时,由于Visual Studio找不到"SignTool.exe",因此出现错误.我已经搜索了几次我的硬盘驱动器,但它在我的电脑上无处可寻.任何人都可以帮我找到它或下载它吗?

publish signtool

142
推荐指数
7
解决办法
19万
查看次数

如何为Windows 10安装SignTool.exe

如何在Visual Studio 2015 for Windown 10中安装SignTool.exe?我试图构建我的项目,但该程序引发了一个错误:

错误签名时发生错误:找不到SignTool.exe.

signtool

76
推荐指数
7
解决办法
11万
查看次数

UAC提示符显示msi的临时随机程序名称,是否可以显示正确的名称?

我正在构建Windows的MSI安装程序并使用signtool对安装程序进行签名.当我运行.msi进行测试时,UAC(用户帐户控制)提示出现,询问我是否要允许安装继续进行.没关系,但是提示显示了许多字段,而对于Program Name字段,它显示的内容类似于"403b3.msi".这不是我正在运行的msi的名称.

如何才能显示正确的程序名称?

windows uac certificate signtool

53
推荐指数
2
解决办法
6369
查看次数

使用Visual Studio 2012时,SignTool.exe或"Windows Kits"目录的路径

使用Visual Studio 2012时,如何获得SignTool.exe的路径?

在Visual Studio 2010中,您可以使用

<Exec Command="&quot;$(FrameworkSDKDir)bin\signtool.exe&quot; sign /p ... />
Run Code Online (Sandbox Code Playgroud)

哪里$(FrameworkSDKDir)

"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\"
Run Code Online (Sandbox Code Playgroud)

但在Visual Studio 2012中,$(FrameworkSDKDir)

 "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\"
Run Code Online (Sandbox Code Playgroud)

和SignTool在

 "c:\Program Files (x86)\Windows Kits\8.0\bin\x64\"
Run Code Online (Sandbox Code Playgroud)

有越来越路径不是硬编码等这个目录的方式(我试过FrameworkSDKDirWindowsSDKDir,但都指向v8.0A目录).

(我知道SignFile MSBuild任务,但我不能使用它,因为它不接受证书密码.)

msbuild signtool visual-studio-2012

41
推荐指数
5
解决办法
4万
查看次数

signtool以inno设置失败:0x80070003 - "Store IsDiskFile()failed"

在签署我的软件时,我遇到了一个奇怪的错误.我正在使用inno setup 4.5.2.

Running Sign Tool command: signtool.exe sign /a /f cert.pfx /v /t "http://timestamp.verisign.com/scripts/timstamp.dll" /p pwd /d "Setup Label" "out\uninst.e32.tmp"
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: Store IsDiskFile() failed." (-2147024893/0x80070003)
Error in W:\path\installer.iss: Sign Tool failed with exit code 0x1.
Compile aborted.
Run Code Online (Sandbox Code Playgroud)

命令行似乎很好,它甚至可以在inno setup compile之外工作.设置SignedUninstaller=no让我走得更远时,在尝试对输出设置文件进行签名时仍会出现此错误.

现在我几乎到处都看到错误代码(0x80070003)和/或消息"Store IsDiskFile()失败".我也尝试过多个版本的signtool.

inno-setup signtool

29
推荐指数
1
解决办法
2万
查看次数

为什么我的根证书不受信任?

我从证书服务器发给自己一个代码签名证书.我也从同一个证书服务器发给自己的根证书.根证书存在于"受信任的根证书颁发机构"文件夹中的"当前用户"和"本地计算机"证书存储中.我已使用signtool.exe向导成功签名了DLL:

"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe" signwizard <MyDLLName>.dll
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试验证我的DLL时,它验证失败并出现以下错误:

"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe" verify <MyDLLName>.dll
SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
SignTool Error: File not valid: <MyDLLName>.dll
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我认为在受信任的根证书颁发机构文件夹中拥有根证书将验证DLL.

c# dll code-signing certificate signtool

24
推荐指数
1
解决办法
2万
查看次数

signtool无法对带有时间戳的SHA2和SHA1进行双重签名

我们需要使用signtool.exe使用SHA1和SHA2双重签名我们的二进制文件,我们的证书支持256位SHA2.

使用Windows 8 SDK的signtool:

例如:

signtool.exe签名/ as/fd sha256/t http://timestamp.verisign.com/scripts/timstamp.dll/f"certificate.pfx"/ p XXXXXXX"file.dll"

(XXXXXXX是我们的证书密码)

因为神秘错误而失败:

SignTool错误:SignedCode :: Sign返回错误:0x80070057参数不正确.SignTool错误:尝试签名时发生错误:file.dll

在没有时间戳的情况下进行签名,单独签名为SHA1或SHA256可以正常工作,但是我们需要双重签名,并且想象没有时间戳是不行的.

我已经尝试了32位和64位版本的signtool.exe,在Win7和Win8机器上试过它,并尝试使用命令行选项,但无济于事.以前有人打过这个问题吗?

windows sha256 authenticode verisign signtool

23
推荐指数
4
解决办法
2万
查看次数

使用CryptUIWizDigitalSign API签署appxbundle

关于Authenticode签署UWP appxbundle文件,我面临一个相当有趣的问题.

一些背景信息:客户向我们提供了包含签名证书的SafeNet USB令牌.当然,私钥不可导出.我希望能够将此证书用于我们的自动发布版本以对包进行签名.遗憾的是,令牌需要在每个会话中输入一次PIN,因此,例如,如果构建代理重新启动,则构建将失败.我们在令牌上启用了单一登录,因此足以在会话后解锁它.

当前状态:我们可以在appxbundle上使用signtool而不会出现任何问题,因为令牌已被解锁.这种方法运行良好,但一旦重新启动机器或工作站被锁定就会中断.

经过一番搜索,我找到了这段代码.这将获取签名参数(包括令牌PIN)并调用Windows API对目标文件进行签名.我设法编译它并且它完美地用于签署安装包装器(EXE文件) - 令牌没有要求PIN并且由API调用自动解锁.

但是,当我在appxbundle文件上调用相同的代码时,调用CryptUIWizDigitalSign失败并显示错误代码0x80080209 APPX_E_INVALID_SIP_CLIENT_DATA.这对我来说是一个谜,因为在同一个包上调用signtool,使用相同的参数/证书可以正常工作,因此证书应该与包完全兼容.

有没有人有这样的经历?有没有办法弄清楚错误的根本原因(我的证书和捆绑包之间不兼容)?

编辑1

回应评论:

我用来调用API的代码(直接来自前面提到的SO问题)

#include <windows.h>
#include <cryptuiapi.h>
#include <iostream>
#include <string>
#pragma comment (lib, "cryptui.lib")

const std::wstring ETOKEN_BASE_CRYPT_PROV_NAME = L"eToken Base Cryptographic Provider";

std::string utf16_to_utf8(const std::wstring& str)
{
    if (str.empty())
    {
        return "";
    }

    auto utf8len = ::WideCharToMultiByte(CP_UTF8, 0, str.data(), str.size(), NULL, 0, NULL, NULL);
    if (utf8len == 0)
    {
        return "";
    }

    std::string utf8Str;
    utf8Str.resize(utf8len);
    ::WideCharToMultiByte(CP_UTF8, 0, str.data(), str.size(), …
Run Code Online (Sandbox Code Playgroud)

winapi cryptography authenticode signtool uwp

18
推荐指数
1
解决办法
638
查看次数

如何安全地配置CI服务器以对二进制文件进行数字签名?

有许多站点可以解释如何signtool.exe.pfx证书文件上运行,该文件归结为:

signtool.exe sign /f mycert.pfx /p mypassword /t http://timestamp.server.com \
  /d "My description"   file1.exe file2.exe
Run Code Online (Sandbox Code Playgroud)

我有一个持续集成的CI流程设置(使用TeamCity),它像大多数CI流程一样,完成所有工作:检查源代码,编译,签署所有.exes,将软件包签入安装程序,然后签署安装程序.exe.目前有3个构建代理程序,运行相同的VM,其中任何一个都可以运行此过程.

不安全的实施

为了实现这一目标,就安全性而言,我做了一些Bad Things(TM):.pfx文件在源代码管理中,并且它的密码在构建脚本中(也在源代码管理中).这意味着任何能够访问源代码存储库的开发人员都可以获取pfx文件并执行他们喜欢的任何恶意内容.(我们是一个相对较小的开发商店,相信每个人都可以访问,但显然这仍然不好).

最终的安全实施

我能找到"正确"做到这一点,就是你:

  • 将pfx和密码保存在某些安全介质上(如带有手指解锁的加密USB驱动器),可能不在一起
  • 仅指定几个人可以访问签名文件
  • 只签署一个非连接的专用机器上的最终版本,该机器保存在一个锁定的保险库中,直到您需要将其带出来进行此代码签名仪式.

虽然我可以看到这个安全性的优点..这是一个非常繁重的过程,并且在时间方面很昂贵(运行此过程,安全地保留证书备份,确保代码签名机器处于工作状态等) ).

我确信有些人会跳过步骤,只需手动签署存储在他们个人系统上的证书的文件,但这仍然不是很好.

它也与安装程序中使用的签名文件(也由构建服务器构建)不兼容 - 当您安装了具有UAC提示以获得管理员访问权限的.exe时,这一点很重要.

中间地带?

我更关心的是没有向用户提供可怕的"不受信任的应用程序"UAC提示,而不是证明它是我的公司.同时,将私钥和密码存储在每个开发人员(以及QA和高级技术支持)都可以访问的源代码存储库中显然不是一个好的安全实践.

我想要的是CI服务器在构建过程中仍然像今天一样签名,但没有密码(或证书的私钥部分)可供访问源代码存储库的每个人访问.

有没有办法将密码保留在构建之外或以某种方式保护?我应该告诉signtool使用证书存储区(我如何使用3个构建代理程序和构建作为非交互式用户帐户运行)?别的什么?

teamcity continuous-integration code-signing authenticode signtool

16
推荐指数
1
解决办法
3059
查看次数