Решение ClickOnce VSTO, подписанное mage.exe - ошибка сертификата не является доверенной

Я пытаюсь развернуть решение VSTO, которое представляет собой 2 надстройки для Word и Outlook, используя ClickOnce. Из-за нашей инфраструктуры / практики развертывания я не могу опубликовать ее с помощью 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] является отпечатком реального сертификата и используется для поиска сертификата в хранилищах сертификатов. Мне сказали, что это мера безопасности, поэтому файл сертификата не нужно распространять вместе с пакетом развертывания.

После подписания у файлов изменяются значения подписи, но для publisherIdentity по-прежнему сохраняются имя и IssueKeyHash самозаверяющего сертификата.

Я попытался указать эти два значения перед повторной подписью, но я не знаю, как рассчитать IssueKeyHash.

Любой совет о том, как поступить, будет высоко ценится!

Редактировать:
Я пробовал другие параметры 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()

,

4 ответа

Решение

Мы нашли, в чем проблема. Мы использовали версию средства mage.exe из Windows SDK из папки с именем 7A (я не помню полные пути, извините). Затем коллега нашел другую папку с версиями 7A, 8 и 8A. После того, как мы взяли.exe из папки 8A, установка работает как положено.

Сертификат, с которым приложение подписано, не является доверенным в Windows. Как обойти,

  1. Щелкните правой кнопкой мыши на setup.exe,
  2. Выбрать properties тогда Digital Signatures табуляция
  3. Выберите Vellaichamy/ пользователя, затем нажмите Details
  4. Нажмите View Certificate и нажмите Install Certificate,

Не позволяйте ему автоматически выбирать, где хранить сертификат, установите сертификат в хранилище доверенных корневых центров сертификации. После установки сертификата приложение должно установить...

Взгляните на статью " Предоставление доверия решениям Office", в которой говорится следующее:

Если вы подпишете решение с помощью известного и доверенного сертификата, решение будет автоматически установлено без запроса конечного пользователя принять решение о доверии. После получения сертификата сертификат должен быть явно доверенным путем добавления его в список доверенных издателей.

Дополнительные сведения см. В разделе Как добавить доверенного издателя на клиентский компьютер для приложений ClickOnce.

Также вам может пригодиться статья " Развертывание решения Office" с помощью ClickOnce.

Попробуйте скопировать все необходимые файлы на клиентский компьютер и установить. Если вы можете избежать установки с сетевого диска, вы можете избежать этого исключения.

Другие вопросы по тегам