在没有pfx文件的情况下签署Excel / VSTO项目

时间:2017-05-18 20:48:52

标签: c# excel vsto

我有一个结合了C#和Excel的VSTO项目。我的雇主要求我使用我没有pfx文件的证书签名,我只在芯片卡上有证书。

我已经阅读了大多数关于签署VSTO的手册和问题,但所有人都假设我有pfx文件。我在Visual Studio中的设置如下:

    选中
  1. “签署ClickOnceManifest”,使用“从商店中选择”选择来自chipCard的证书
  2. “签署Assemly”已选中。我没有pfx文件,所以我点击“新建”并创建了一个名为assemblySigningCertificate.pfx的证书(这可能是一个完全虚假的步骤,但这是我得到的唯一的pfx)
  3. 发布项目后,我运行了一个脚本,使用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 "
    
  4. 完成所有这些后,我安装VSTO并运行xlsm文件。我收到“SignatureDescription无法从提供的签名算法创建”错误指向VSTO文件。错误的详细信息仅提供了stackTrace,没有别的。

    我的问题是:

    1. 甚至可以在没有我有pfx文件的证书的情况下签署VSTO项目吗?
    2. 如果我没有pfx文件,在设置的“签署程序集”部分创建新证书是正确的吗
    3. 我在做其他完全不对的事吗?
    4. 非常感谢任何帮助, 丹尼尔

2 个答案:

答案 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在目标系统上。