我有一个结合了C#和Excel的VSTO项目。我的雇主要求我使用我没有pfx文件的证书签名,我只在芯片卡上有证书。
我已经阅读了大多数关于签署VSTO的手册和问题,但所有人都假设我有pfx文件。我在Visual Studio中的设置如下:
发布项目后,我运行了一个脚本,使用mage.exe更新签名,例如
set AppPublishPath=publish
set AppPublishVersionPath=publish\Application Files\diagramUnifier_1_0_0_0
copy bin\Debug\*.dll "%AppPublishVersionPath%"
copy bin\Debug\*.dll.config "%AppPublishVersionPath%"
copy bin\Debug\*.exe "%AppPublishVersionPath%"
mage.exe -update "%AppPublishVersionPath%\diagramUnifier.dll.manifest" -ch "… certificate hash from certmgs.msc "
mage.exe -update "%AppPublishVersionPath%\diagramUnifier.vsto" -appmanifest "%AppPublishVersionPath%\diagramUnifier.dll.manifest" -ch "… certificate hash from certmgs.msc "
mage.exe -update "%AppPublishPath%\diagramUnifier.vsto" -appmanifest "%AppPublishVersionPath%\diagramUnifier.dll.manifest" -ch "… certificate hash from certmgs.msc "
完成所有这些后,我安装VSTO并运行xlsm文件。我收到“SignatureDescription无法从提供的签名算法创建”错误指向VSTO文件。错误的详细信息仅提供了stackTrace,没有别的。
我的问题是:
非常感谢任何帮助, 丹尼尔
答案 0 :(得分:1)
问题:使用selfcert.exe创建证书时,无法导出其私钥。 Windows证书控制台的导出向导说"关联的私钥被标记为不可导出"。
解决方案版本1:将makecert.exe与" -pe"一起使用创建选项 并使用可导出的私钥存储证书:
makecert -r -pe -n" CN =您的姓名" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.3 -ss My
然后,您可以从Windows证书存储区导出证书,包括私钥。
注意:旧版本的makecert.exe不支持" -pe"选项。 .NET Framework SDK 2.0和2002年10月版的Platform SDK(版本号3718.1)包含一个新版本的makecert.exe(5.131),它支持" -pe"选项。 (.NET Framework SDK 1.0和1.1都包含不支持" -pe"选项的旧版本的makecert.exe。
解决方案版本2:以下命令可用于创建PFX 同时包含自签名证书的文件(PKCS#12) 使用关联的私钥:
makecert -r -n "CN=Your Name" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.3 -sv selfcert.pvk selfcert.cer
cert2spc selfcert.cer selfcert.spc
pvkimprt -pfx selfcert.spc selfcert.pvk
最后一个命令(pvkimprt -pfx)创建文件selfcert.pfx。然后,可以将此PFX文件导入Windows证书存储区并用于代码签名。 (makecert.exe和cert2spc.exe是几个Microsoft SDK的一部分,例如Platform SDK或DotNet SDK,可以从microsoft.com下载.pvkimprt.exe可以从Microsoft单独下载。)
答案 1 :(得分:0)
您是说您没有证书的私钥吗?如果是这样,那么你肯定无法签署程序集/安装程序。签署的重点是证明程序集来自可信/认证的源(即证书(私钥)持有者)。
您的雇主是谁?较大的公司已制定流程以通过其IT /安全部门签署安装程序和程序集。我不会仔细检查你工作的情况。
另一方面......你安装了.NET4.5吗?见here它可能有帮助......
此更改是由于我们停止使用旧版本 证书作为默认(SHA-1)在NetFX4.5中签署清单和 相反,使用较新的版本(SHA-256),这是不被识别的 NetFx4.0运行时。因此,在解析清单时,4.0运行时 抱怨无效的清单。对于遗留框架,当我们尝试时 在没有目标运行时的框上运行ClickOnce应用程序, ClickOnce弹出一条消息给用户说“你需要xxxx.xx运行时 运行这个应用程序“。但是,如果运行4.5 ClickOnce应用程序,则启动.NET 4.5 在只安装了.NET 4.0的盒子上,消息抱怨了 无效的清单。要解决此问题,您必须安装 .Net Framework 4.5在目标系统上。