我正在创建一个Appx包makeappx.exe,然后尝试使用它来签名SignTool.exe.
我从SignTool得到的错误是:
"错误:SignerSign()失败." (-2147024693/0x800700cb)
我使用的证书是由我根据此处的说明创建的.
在EventViewer没有关于此记录失败的操作!
我不明白这个错误意味着什么,以及如何解决它!有没有人遇到这个,并找到了解决方案?
我不能使用Visual Studio所以我需要坚持makeappx.exe.
我正在使用signtool将数字签名应用于各种.exe/ .dll文件.但是,在Windows资源管理器中查看已签名的文件显示没有设置电子邮件地址,就像在此屏幕截图中一样(我绝不隶属于"Paramount Software UK Ltd." - 这个屏幕截图只是我的第一个结果通过谷歌发现):

但是,我还看到其他屏幕截图显示,以某种方式可以定义一个电子邮件地址(即使它是一个虚假的地址,就像在这种情况下):

是否可以通过signtool,或者它实际上是证书本身的属性来设置此电子邮件地址(即,在购买证书时需要指定)?
我最近获得了一个新的代码签名证书.我正在使用MSBuild的SignFile任务来签署应用程序清单.由于某种原因,任务正在返回:
MSB3481: The signing certificate could not be located.
Ensure that it is in the current user's personal store.
Run Code Online (Sandbox Code Playgroud)
证书肯定在我的个人商店,我可以在certmgr.msc中看到它.而且我相信我是以同一个用户身份登录的,因为我可以使用同一个人商店中的不同证书对清单进行签名.不知道为什么找不到这个新证书.
我甚至可以使用signtool.exe和新证书的SHA1来正常签名文件.但我真的更喜欢使用现有的MSBuild和SignFile任务.有什么想法可能会出错吗?
我也尝试使用和不使用完整的认证路径导入证书.
我们将可执行文件交付给客户端服务,该服务在从我们的服务器下载该可执行文件后在新进程中启动该可执行文件。
可执行文件已使用我们公司的 CodeSigning-Certificate 进行签名(验证码),现在我想验证下载的可执行文件是否使用此 CodeSigning-Certificate 进行了有效签名,以防止恶意的中间人攻击。
但目前我找不到任何关于如何在不使用“signtool.exe”(客户端不可用)的情况下验证这一点的提示。
客户端上的下载服务是一个用 C# 编写的 .NET 4.0 应用程序。所以我正在寻找一种方法来验证下载文件的验证码,并且只有在验证成功时才继续。
我多年来一直使用 SHA1 签名,但从 2016 年开始,Windows 强制开发人员使用 SHA256。
Windows 对 Authenticode 代码签名和时间戳的强制执行
通过使用 Windows 7 SDK signtool,对 SHA-256 进行签名的函数是“未知命令”,因此此 signtool 作为 signtool 已过时,不应再使用。
为了使用 SHA256 进行签名,我下载了 Windows 8.1 SDK 以获取具有新功能(/fd 和其他一些功能)的 signtool.exe。BAT 文件和 signtool 适用于 Windows 8 和 10,所以我知道它可以工作,但在 Windows 7 上尝试为文件添加时间戳时会崩溃。
我使用 bat 文件对文件进行签名,如下所示(我编辑了 BAT 文件,因此它不显示变量、完整路径、公司名称和密码):
Path\signtool.exe sign /f "Path\Certificate.p12" /fd sha256 /p *password* /du "URL" /tr "timestampServer?td=sha256" /td sha256 /d "Product name" "Filename"
Run Code Online (Sandbox Code Playgroud)
我想,我没有合适的 SDK 来支持某些功能,但我在互联网上找不到任何关于如何在 Windows 7 上设置它的信息。我尝试安装 MS Visual C++ 2015 Redistributable (x64 ) 在我的机器上没有解决问题。
我们需要使用 sha2 算法对 Windows 软件进行签名,但安装 signtool 似乎是一个问题,因为我很难在我的机器上安装该软件。
此外,我想在linux上签署exes。
我们曾经使用符号代码执行任务,但它仅支持 sha1 和 md5。自 2016 年 1 月 1 日起,不再接受 sha1 和 md5。
因此,我想知道执行任务的替代方法是什么。
更新:我确实从另一台计算机中提取了一个签名工具,它也用时间戳对文件进行了签名:
signtool.exe sign /fd SHA256 /a /f file.pfx /p my password /t http://timestamp.verisign.com/scripts/timstamp.dll filetosign.exe
Run Code Online (Sandbox Code Playgroud)
它确实显示为使用 SHA256 签名,并且有时间戳,但 InternetExplorer 仍然存在问题。
恕我直言,仍然需要解决这个问题,以了解是否有替代方案,以及该替代方案是否可以在 Linux 下工作,因为可以完成这项工作的替代工具意味着,由于 signtool,该解决方案无法正常工作,如反对证书问题或 IE 问题。
我想签署一个我的开源程序的静态.exe版本,以便它可以"正常"方式执行到"普通"Windows用户.
我从certum.eu购买了一个开源代码签名证书,以便能够做到这一点.
在互联网上进行了一些搜索之后,我尝试使用osslsigncode 1.7.1在我的Linux机器上使用来签署exe文件
osslsigncode sign -pkcs12 cert.p12 -pass "..." -h sha2 -t http://timestamp.verisign.com/scripts/timstamp.dll -in some.exe -out some-signed.exe
Run Code Online (Sandbox Code Playgroud)
有人在Windows 10上测试它,会弹出一个粗略警告:"Windows保护您的PC.Windows SmartScreen阻止了无法识别的应用程序启动.运行此应用程序可能会使您的PC面临风险."
所以我尝试使用本机Windows工具signtool.exe来签名.我在旧的虚拟Windows XP中安装了它(在那里我也编译了程序;我没有访问任何其他Windows机器)并用以下方式签署了exe文件
"C:\Programme\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe" sign /f C:\cert.p12 /p "..." /t http://timestamp.verisign.com/scripts/timstamp.dll C:\some.exe
Run Code Online (Sandbox Code Playgroud)
这个工具也说一切都还好,但仍然会弹出同样的警告.
这样,证书就没用了,因为"签名"的exe文件确实产生了与未签名的文件完全相同的警告.我非常感谢这方面的帮助.
一周以来,我一直在努力思考Authenticode 证书。我从 Comodo 购买了一个 CSC,我有一个 ClickOnce 应用程序,我想签名以便 SmartScreen 过滤器警告消失。
我的应用程序程序集是强命名的,我在我的项目属性中勾选了“签署程序集”框。我还在同一项目属性中勾选了“签署 ClickOnce 清单”的框。最后,我在我的项目文件中将以下执行设置为 AfterCompile 目标,以便使用 SHA1 和 SHA256 对可执行文件进行双重签名:
<Target Name="AfterCompile">
<Exec Command=""C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword /t http://timestamp.comodoca.com /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
<Exec Command=""C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 /as /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
</Target>
Run Code Online (Sandbox Code Playgroud)
然后我运行以下命令来发布项目:
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /target:Publish /p:Configuration=Release /p:Platform=AnyCPU MyCoolApplication.csproj
我注意到这个命令最终会创建三个独立版本的 MyCoolApplication.exe:
不幸的是,需要工作的是 bin\Release\app.publish 中的副本,但由于某种原因,此版本正在删除双重签名。我的理解——这可能是错误的——是它在 …
我已经进行了基于 Visual Studio 2012 的项目。通过以下方式找到了 signtool.exe 的路径:
<SignToolPath Condition=" Exists('$(WindowsSDK80Path)bin\x86\signtool.exe') and '$(SignToolPath)'=='' and '$(PROCESSOR_ARCHITECTURE)'=='x86' ">$(WindowsSDK80Path)bin\x86\signtool.exe</SignToolPath>
<SignToolPath Condition=" Exists('$(WindowsSDK80Path)bin\x64\signtool.exe') and '$(SignToolPath)'=='' and '$(PROCESSOR_ARCHITECTURE)'=='AMD64' ">$(WindowsSDK80Path)bin\x64\signtool.exe</SignToolPath>
Run Code Online (Sandbox Code Playgroud)
现在我想将项目移植到 Visual Studio 2017。安装后,由于缺少 Windows SDK 8,以这种方式获取路径不再有效。
我已经安装了 Click Once 组件和 Windows 10 SDK。因此 signtool.exe 可用。
有人能告诉我如何使用 Visual Studio 2017 找到路径吗?
在我们的构建服务器上,我们使用 signtool.exe 对我们的工件进行签名。
每次都将相同的参数传递给 signtool.exe,但由于“私钥过滤器”而未使用我们的证书,因此它偶尔会失败或通过。
我们已经使用这个流程一段时间了,但我们在 2019 年 3 月 27 日早上开始看到失败。
我们使用以下参数启动 signtool.exe 进程:
sign /fd sha256 /f "cert.p12" /p certPass /du hostSiteHere /v /debug /tr timeStampUrl "fileNames"
规格 - signtool.exe 来自 windows 10 sdk - 构建服务器作为 windows 2016 服务器 ec2 实例托管在 AWS 中 - jenkins (v2.1.68) 使用亚马逊 ec2 插件 (v1.42) 运行构建
日志,取决于它是通过还是失败:
The following certificates were considered:
Issued to: myCompany, Inc.
Issued by: DigiCert SHA2 Assured ID Code Signing CA
Expires: Wed Oct 30 12:00:00 2019
SHA1 …Run Code Online (Sandbox Code Playgroud) signtool ×10
code-signing ×4
windows ×4
msbuild ×3
authenticode ×2
c# ×2
.net ×1
amazon-ec2 ×1
appx ×1
certificate ×1
clickonce ×1
email ×1
jenkins ×1
linux ×1
sha2 ×1
sha256 ×1