Решение 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 по-прежнему имеет имя и 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()

.


person Martin    schedule 25.02.2015    source источник
comment
Я отредактировал сообщение и добавил дополнительные сведения о том, как я пытался решить проблему.   -  person Martin    schedule 26.02.2015


Ответы (4)


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

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

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

person vellaichamy    schedule 30.06.2015

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

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

Для получения дополнительной информации см. Как: добавить доверенного издателя на клиентский компьютер для приложений ClickOnce.

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

person Eugene Astafiev    schedule 25.02.2015
comment
Привет, Евгений, спасибо за ваш вклад. Если я правильно понял, вы предлагаете установить наш сертификат на клиентские машины. Мы бы не хотели этого делать, так как установка сертификата для каждого клиента и всех его пользователей невозможна. Может ли это произойти автоматически во время установки ClickOnce, например, с помощью инструмента CertMgr? Наша цель - сделать установку максимально простой для пользователей. Запрос на подтверждение доверия - это нормально, но он не появляется, вместо этого установка прерывается с сообщением об ошибке. - person Martin; 26.02.2015
comment
О, я хотел бы добавить к этому, что мой коллега добавил сертификат на свою машину для тестирования, чтобы увидеть, решит ли это проблему, но он по-прежнему получает то же сообщение об ошибке. - person Martin; 26.02.2015

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

person Martin    schedule 27.02.2015

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

person Turnercj65    schedule 14.07.2015