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

ClickOnce VSTO solution signed with mage.exe - certificate not trusted error

我正在尝试使用 ClickOnce 部署 VSTO 解决方案,这是 Word 和 Outlook 的 2 个插件。由于我们的部署 infrastructure/practices,我无法使用 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 参数,例如“-TrustLevel FullTrust”(没有任何效果)或“-UseManifestForTrust True”以及 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()

.

查看 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 文章很有帮助。

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

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

  1. 右键单击 setup.exe
  2. Select properties 然后 Digital Signatures 选项卡
  3. Select Vellaichamy/user 然后点击 Details
  4. 单击 View Certificate 并单击 Install Certificate

不要让它自动选择存储 sert 的位置,将证书安装在 Trusted Root Certification Authorities Store 中。安装证书后,应用程序应安装...

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