可以在不安装证书的情况下使用MSBuild的SignFile吗?

时间:2019-08-29 19:10:48

标签: msbuild certificate clickonce assembly-signing

我有一个ClickOnce应用程序,该应用程序已更新,可以使用具有MSBuild的现代部署Jenkins Pipeline进行部署。这项工作的一部分是对.manifest和.application文件进行签名。

以前,我们使用<SignFile>与MSBuild进行签名,使用的是安装在构建计算机上用户个人存储中的证书。它适用于:

<SignFile SigningTarget="MyApp.exe.manifest" 
          CertificateThumbprint="1a 9f ..." 
          TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll" />
<SignFile SigningTarget="MyApp.application" 
          CertificateThumbprint="1a 9f ..." 
          TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll" />

但是,在21世纪,我们希望通过版本控制或通过API在秘密存储中提供构建所需的一切,因此我们不再依赖于构建服务器处于特定状态。< / p>

那么我们如何使用SignFile在不需要安装证书的情况下对ClickOnce清单和应用程序进行签名?还是我不考虑这一权利?

如果有比使用<SignFile>更好的方法,请告诉我-据我所知,SignTool.exe和Mage.exe都需要同时安装证书。

1 个答案:

答案 0 :(得分:0)

似乎旧的mage.exe比SignTool功能更全。

所以我将mage.exe从C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools复制到我的项目依赖项文件夹中,然后在MSBuild中对我有用:

<Message Text="Signing APP manifest (.exe.manifest)" />
<Exec Command="Dependencies\mage.exe -sign $(MyAppManifest).exe.manifest -CertFile MyLocalKey.pfx -Password MyPassword123" />

然后,我执行了与部署清单(.application)文件非常相似的操作。

显然,较新版本的mage.exe确实可以支持SHA-256,这与我在该主题上发现的某些网页相反(也许它们较旧)。