Я пытаюсь развернуть решение 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()
.