2017-05-18 107 views
0

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

我已经阅读了大多数手册和在这里提到的有关签署VSTO的问题,但都以某种方式假定我拥有pfx文件。我在Visual Studio中设置如下:

  1. “签署ClickOnceManifest”被选中,使用从芯片卡的证书中选择
  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 " 
    

一个剧本,我安装VSTO并运行XLSM文件。我收到一个“SignatureDescription无法从指定算法提供的”错误指向VSTO文件创建。错误的详细信息只提供了一个stackTrace,没有别的。

我的问题是:

  1. 是它甚至有可能签不为我有一个PFX文件的证书VSTO项目?
  2. 如果我没有pfx文件,是否正确地在设置中的“签名程序集”部分创建新证书
  3. 我在做其他事情完全错误吗?

任何帮助是非常赞赏, 丹尼尔

回答

1

问题:当通过使用SelfCert.exe的创建的证书,它的私钥不能被导出。 Windows证书控制台的导出向导显示“关联的私钥被标记为不可导出”。

解决方案版本1:使用带有 “-pe” 选项makecert.exe创建 和证书存储与可导出的私钥:

makecert -r -pe -n“CN =您的姓名“-b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.3 -ss我的

然后,您可以从Windows证书存储区导出证书,包括私人键。

注意:旧版本的makecert.exe不支持“-pe”选项。 .NET Framework SDK 2.0和2002年10月版的Platform SDK(内部版本3718.1)包含支持“-pe”选项的新版本makecert.exe(5.131)。 (.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的一部分,例如平台SDK或DotNet SDK,可以从microsoft.com下载。pvkimprt.exe可以单独从Microsoft下载)

+0

谢谢。只需要清楚一点 - 雇主的IT安全部门。根本不希望任何人拥有一个pfx文件(不知道原因)。那么获得一个pfx文件是获得我在VSTO签署情况下所需的唯一方法吗? –

+0

是的,先生。您需要实际的pfx文件。除非您使用自签名测试环境 – Hyrein

0

你说你没有证书的私钥?如果是这种情况,那么你绝对不能签署程序集/安装程序。签名的要点是证明程序集来自可信/认证来源(即证书(私钥)持有者)。

谁是你的雇主?较大的公司有适当的流程来获得通过其IT /安全部门签署的安装程序和程序集。我会仔细检查,你的工作情况并非如此。

另一点......你是否安装了.NET4.5?见here它可以帮助...

这一变化让我们停止使用旧版证书 默认(SHA-1)NetFX4.5签署的清单和 而是使用新版本的事实是由于( SHA-256),它不被 NetFx4.0运行时识别。因此,在解析清单时,4.0运行时 抱怨无效清单。对于传统框架,当我们尝试 在没有目标运行时的框上运行ClickOnce应用时, ClickOnce会向用户弹出一条消息,告知用户“您需要xxxx.xx运行时 才能运行此应用”。但是从.NET 4.5开始,如果在安装了.NET 4.0的机器上运行4.5 ClickOnce应用程序 ,则该消息会抱怨 是无效的清单。为了解决该问题,您必须在目标系统上安装 .Net Framework 4.5。

+0

谢谢。至于签署什么 - 雇主不会将pfx文件分发给任何开发者,无论是否与VSTO合作。我猜想用普通C#开发的人可以使用芯片卡来签署他们的代码,否则就根本没有芯片卡。我的雇主是该国最大的银行,但他们的IT部门对我的代码没有任何线索,因此他们真的不愿意用除我自己的证书之外的任何东西签名。 –

+0

我不断与给IT证书的IT安全部门交换电子邮件,但他们似乎对ClickOnce等事情一无所知。是的,在出现此错误的机器上,我只安装了.NET 4.5 +。 –

+0

我提到过,因为我也为一个大型组织工作,当我需要签署我的插件时,我必须打开一个支持案例,然后经历一个非常漫长的过程,由大约10位经理授权并最终登录桌面一位IT系统工程师,谁好心签名并将其传回给我们...... –

相关问题