使用mage.exe签名的ClickOnce VSTO解决方案 - 证书不可信任错误

时间:2015-02-25 13:29:19

标签: deployment certificate vsto clickonce mage

我尝试使用ClickOnce部署VSTO解决方案,这是Word和Outlook的2个插件。由于我们的部署基础架构/实践,我无法使用Visual Studio发布它,而是构建在构建服务器上并通过部署服务器进行部署。

对于本地开发,使用自签名证书。部署使用此自签名证书(如果在计算机上安装了自签名证书),但现在我想添加一个真实的公司证书,以便可以将应用程序部署到用户。

在部署期间,在调配配置文件后,将使用真实证书更新和重新签名。但是,这会在安装期间产生以下错误:

System.Security.SecurityException: Customized functionality in this application will not work because the certificate used to sign the deployment manifest for <app name> or its location is not trusted. Contact your administrator for further assistance.
       at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustPromptKeyInternal(ClickOnceTrustPromptKeyValue promptKeyValue, DeploymentSignatureInformation signatureInformation, String productName, TrustStatus status)
       at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustUsingPromptKey(Uri manifest, DeploymentSignatureInformation signatureInformation, String productName, TrustStatus status)
       at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustUsingPromptKey(Uri manifest, DeploymentSignatureInformation signatureInformation, String productName)
       at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.ProcessSHA1Manifest(ActivationContext context, DeploymentSignatureInformation signatureInformation, PermissionSet permissionsRequested, Uri manifest, ManifestSignatureInformationCollection signatures, AddInInstallationStatus installState)
       at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.VerifySecurity(ActivationContext context, Uri manifest, AddInInstallationStatus installState)
       at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()
    The Zone of the assembly that failed was:
    MyComputer

我唯一的领导是,在重新签名后,publisherIdentity元素中的值不会更改(.vsto和.manifest),只有Signature元素具有与新证书对应的值。

以下命令用于签署.vsto和.manifest文件(据我从部署脚本中可以看到):

mage.exe -Update "[path to .vsto/.manifest]"
mage.exe -Sign "[path to .vsto/.manifest]" -CertHash [certificateHash]

其中[certificateHash]是真实证书的指纹,用于在证书库中查找证书。我告诉这是安全措施,因此证书文件不必与部署包一起分发。

签名后,文件的Signature值已更改,但publisherIdentity仍具有自签名证书的名称和issuerKeyHash。

我尝试在重新签名之前调整这两个值,但我不知道如何计算issuerKeyHash。

非常感谢任何关于如何进行的建议!

编辑:
我正在尝试其他mage.exe参数,例如&#39; -TrustLevel FullTrust&#39; (没有任何效果)或者&#39; -UseManifestForTrust True&#39;以及Name和Publisher参数,它们产生了此错误消息(与上面提到的不同)。

************** Exception Text **************
System.InvalidOperationException: You cannot specify a <useManifestForTrust> element for a ClickOnce application that specifies a custom host.
   at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.GetManifests(TimeSpan timeout)
   at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()

4 个答案:

答案 0 :(得分:15)

Windows不信任应用程序签名的证书。作为一种解决方法,

  1. 右键点击setup.exe
  2. 选择properties,然后选择Digital Signatures标签
  3. 选择Vellaichamy /用户,然后点击Details
  4. 点击View Certificate,然后点击Install Certificate
  5. 不要让它自动选择存储sert的位置,将证书安装在受信任的根证书颁发机构存储中。安装证书后,应用程序应安装...

答案 1 :(得分:2)

请查看Granting Trust to Office Solutions文章,其中说明了以下内容:

如果您使用已知且受信任的证书对解决方案进行签名,则会自动安装解决方案,而不会提示最终用户做出信任决策。 获取证书后,必须通过将证书添加到“受信任的发布者”列表来明确信任该证书。

有关详细信息,请参阅How to: Add a Trusted Publisher to a Client Computer for ClickOnce Applications

另外,您可能会发现Deploying an Office Solution by Using ClickOnce文章很有帮助。

答案 2 :(得分:0)

我们发现了问题所在。我们从名为7A的文件夹中使用了Windows SDK中的mage.exe工具版本(我不记得完整路径,抱歉)。然后,一位同事找到了另一个版本为7A,8和8A的文件夹。一旦我们从8A文件夹中获取.exe,安装就会按预期工作。

答案 3 :(得分:0)

尝试将所有必需的文件复制到客户端计算机,然后安装。如果您可以避免从网络驱动器安装,则可以避免此异常。