使用signtool.exe自动执行代码签名,但不存储证书或密码 - c#

我在Visual Studio 2013中有一个C#/。NET 4.5 x64项目。这个项目有多个开发人员,因此代码是在Git中管理的。我正在用.dll签名已编译的.exesigntool.exe。我的公司购买了代码签名证书,如果我从命令行手动签名,就像这样:

signtool.exe sign /f cert.p12 /p "password" "compiled.dll"

...然后看起来一切都很好:我收到一条成功消息,并且Windows资源管理器中已编译DLL的属性显示它已正确签名。因此,我对实际的签名过程没有任何问题。

但是,证书及其密码一定不能存在于Git中。它们将带外提供给项目中的所有开发人员。我可以假设每个开发人员在构建项目时都会将证书存储在计算机上的预定义位置,并且他会知道该密码。

所以,这是我的问题:如何配置Visual Studio 2013以自动对其编译的输出签名,而无需将证书或密码保留在Git中?我希望它变得如此简单,只要开发人员在预定义的路径中拥有证书(或导入证书,或以其他方式输入),并假设开发人员知道证书的密码,则在Visual Studio中单击“生成” 2013只是生成并签名,没有任何问题。

如果签名过程可以是非交互式的(没有密码提示),那是一个好处。最终,这将成为连续集成(CI)服务器的一部分,该服务器也可能对其输出进行签名,并且由于它是自动的,因此没有人可以在那里输入密码。但是,我现在将采取任何解决方案。

我的证书是PKCS#12格式,并受密码保护。 Windows声称它没有标记为要导出。

参考方案

我以前使用的解决方案类似于@Mikko的答案,但分为两部分:

本地非受控脚本,仅设置包含密码的环境变量。这是您提供给每个开发人员的文件。

@echo off
set SIGNPASS=whatever

由源代码控制的脚本,该脚本调用先前的脚本并进行实际的签名。

@echo off
setlocal
call "C:\local\signing_password.bat"
"C:\toolpath\signtool.exe" sign /f "c:\certpath\cert.p12" /p "%SIGNPASS%" "%1"
endlocal

setlocal / endlocal对确保如果手动运行脚本,密码不会泄漏到环境中。

"%1"是在构建后步骤中作为脚本参数传递的可执行文件的路径。
..

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

Visual Studio 2012不会让我调试接口的实现 - c#

我正在LINQ中进行一些查询,想了解它的实现,所以我想到了调试的方法,但是当我尝试这样做时,Visual Studio没有进入接口的实现,不知道为什么会这样。我正在使用Visual Studio Community2015。这是我的代码class Client { static void Main(string[] args) { string[] word…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…

Json到php,json_decode返回NULL - php

我正在用PHP进行JSON解析器的一些API,用于存储有关遗产的信息。我在解析时遇到问题,因为它返回的是NULL值而不是数组或对象。简单的JSON代码可以很好地解析,但是可以这样:{"success":true,"totalCount":1,"data":[{"id":99694…