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

Deployment ClickOnce VSTO解决方案使用mage.exe签名-证书不受信任错误,deployment,certificate,vsto,clickonce,mage,Deployment,Certificate,Vsto,Clickonce,Mage,我正在尝试使用ClickOnce部署一个VSTO解决方案,它是Word和Outlook的两个加载项。由于我们的部署基础设施/实践,我无法使用Visual Studio发布它,而是在生成服务器上构建并通过部署服务器部署 对于本地开发,使用自签名证书。部署使用了这个自签名证书(如果机器上安装了自签名证书),但现在我想添加一个真正的公司证书,以便将应用程序部署到用户 在部署过程中,在插入配置文件后,将使用真实证书对其进行更新和重新签名。但是,这会在安装过程中产生以下错误: System.Securit

我正在尝试使用ClickOnce部署一个VSTO解决方案,它是Word和Outlook的两个加载项。由于我们的部署基础设施/实践,我无法使用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
其中,[certificateHash]是真实证书的指纹,用于在证书存储中查找证书。我被告知这是一种安全措施,因此证书文件不必与部署包一起分发

签名后,文件的签名值已更改,但PublisherId实体仍具有自签名证书的名称和issuerKeyHash

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

任何关于如何进行的建议都将不胜感激

编辑:
我尝试了其他mage.exe参数,如'-TrustLevel FullTrust'(没有任何效果)或'-UseManiestfortrust True'以及名称和发布者参数,它们产生了此错误消息(与上面提到的不同)

*************异常文本**************
System.InvalidOperationException:不能为指定自定义主机的ClickOnce应用程序指定元素。
在Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.GetManifests(TimeSpan超时)
在Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()中
.

看一看这篇文章,它陈述了以下内容:

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

有关详细信息,请参阅


你也会发现这篇文章很有帮助

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

Windows不信任应用程序的签名证书。作为一种变通办法

  • 右键单击
    setup.exe
  • 选择
    属性
    然后选择
    数字签名
    选项卡
  • 选择Vellaichamy/user,然后单击详细信息
  • 单击
    查看证书
    ,然后单击
    安装证书

  • 不要让它自动选择存储sert的位置,请在受信任的根证书颁发机构存储中安装证书。安装证书后,应用程序应安装…

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

    您好,Eugene,谢谢您的输入。如果我理解正确,您建议在客户端计算机上安装我们的证书。我们希望避免这样做,因为为每个客户及其所有用户安装证书是不可行的。这是否会在ClickOnce安装过程中自动发生,例如使用CertMgr工具?我们的目标是让用户的安装尽可能简单。一个确认信任的提示没有问题,但是没有出现,而是安装被中止,并显示一条错误消息。哦,我想补充一点,我的一位同事将证书添加到他的机器上进行测试,看看这是否能解决问题,但他还是收到了同样的错误信息。我已经编辑了这篇文章,并添加了更多关于我是如何试图解决这个问题的细节。
    mage.exe -Update "[path to .vsto/.manifest]"
    mage.exe -Sign "[path to .vsto/.manifest]" -CertHash [certificateHash]
    
    ************** 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()