Решение 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. Как обойти,
- Щелкните правой кнопкой мыши на
setup.exe
, - Выбрать
properties
тогдаDigital Signatures
табуляция - Выберите Vellaichamy/ пользователя, затем нажмите
Details
- Нажмите
View Certificate
и нажмитеInstall Certificate
,
Не позволяйте ему автоматически выбирать, где хранить сертификат, установите сертификат в хранилище доверенных корневых центров сертификации. После установки сертификата приложение должно установить...
Взгляните на статью " Предоставление доверия решениям Office", в которой говорится следующее:
Если вы подпишете решение с помощью известного и доверенного сертификата, решение будет автоматически установлено без запроса конечного пользователя принять решение о доверии. После получения сертификата сертификат должен быть явно доверенным путем добавления его в список доверенных издателей.
Дополнительные сведения см. В разделе Как добавить доверенного издателя на клиентский компьютер для приложений ClickOnce.
Также вам может пригодиться статья " Развертывание решения Office" с помощью ClickOnce.
Попробуйте скопировать все необходимые файлы на клиентский компьютер и установить. Если вы можете избежать установки с сетевого диска, вы можете избежать этого исключения.