use*_*413 10 c# code-signing signtool visual-studio-2013
我在Visual Studio 2013中有一个C#/ .NET 4.5 x64项目.不止一个开发人员在这个项目上工作,因此代码在Git中管理.我登录编译.dllS和.exe带signtool.exe.我的公司购买了代码签名证书,如果我从命令行手动签名,如下所示:
signtool.exe sign /f cert.p12 /p "password" "compiled.dll"
Run Code Online (Sandbox Code Playgroud)
...然后看起来一切都很棒:我得到了一条成功消息,Windows资源管理器中已编译DLL的属性显示为正确签名.所以,我对实际的签名过程没有任何问题.
但是,证书及其密码不得存在于Git中.它们将在项目的所有开发人员之外提供.我可以假设每个开发人员在构建项目时都会将证书存储在他计算机上的预定义位置,并且他将知道密码.
所以,这是我的问题:如何配置Visual Studio 2013以自动签署其编译输出而不保留Git中的证书或密码?我希望它一样简单,一旦开发人员在预定义路径(或导入,或其他)中拥有证书,并假设开发人员知道证书的密码,在Visual Studio中单击"构建" 2013只是建立和签署它,没有问题.
如果签名过程可以是非交互式的(没有密码提示),那就是奖金.最终,这将是可以签署其输出的持续集成(CI)服务器的一部分,并且因为它是自动的,所以没有人会输入密码.但是,我现在会采取任何解决方案.
我的证书是PKCS#12格式,并受密码保护.Windows声称它没有标记为导出.
dev*_*uff 13
我之前使用的解决方案类似于@Mikko的答案,但它分为两部分:
一个本地非受控脚本,只设置包含密码的环境变量.这是您为每个开发人员提供的文件.
@echo off
set SIGNPASS=whatever
Run Code Online (Sandbox Code Playgroud)一个源控制的脚本,它调用前一个脚本并执行实际签名.
@echo off
setlocal
call "C:\local\signing_password.bat"
"C:\toolpath\signtool.exe" sign /f "c:\certpath\cert.p12" /p "%SIGNPASS%" "%1"
endlocal
Run Code Online (Sandbox Code Playgroud)该setlocal/ endlocal对保证,如果脚本手动运行密码不泄漏到环境中.
它"%1"是在Post Build步骤中作为脚本参数传递的可执行文件的路径...
小智 8
我无法添加 Daniel Schl\xc3\xb6\xc3\x9fer\ 的答案 - 在我看来这确实是最好的答案。将证书添加到证书存储区后,签名时不需要密码和 pfx。
\n\n不过我想添加以下评论:
\n\n这是我适用于 SHA256 的命令行(哈希已更改):
\n\nsigntool.exe sign /sm /debug /v /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 /sha1 65cc2e77dc52b99d46e7caae2377bb5d7d9384b2 "D:\\app.msi"\nRun Code Online (Sandbox Code Playgroud)\n
小智 7
另一种方法是在每个开发人员私有证书存储中导入证书,然后使用带有signtool的指纹:
signtool ... /sha1 'hex thumbprint' ...
Run Code Online (Sandbox Code Playgroud)
然后,您只需在初始导入证书期间而不是在构建期间需要密码.
| 归档时间: |
|
| 查看次数: |
9675 次 |
| 最近记录: |