Как подписать ClickOnce с сертификатом Sha256 для .NET 4.0, например, Visual Studio Update 3

Я пытаюсь развернуть надстройку надстройки с помощью установщика clickonce. У меня есть пакетный файл, который почти работает, однако при попытке установить в Windows XP я получаю сообщение об ошибке "подпись xml недопустима". Довольно хорошо известно, что XP терпит неудачу с сертификатами SHA256 . Также известно, что обновление 3 для Visual Studio 2013 устраняет проблему при публикации с использованием интерфейса Visual Studio. Мне интересно, как я могу выполнить одно и то же исправление с помощью signtool или mage в командной строке. Вот мой текущий пакетный файл, который работает для всего, кроме Windows XP:

:: Build and publish
msbuild /target:clean,publish /property:MapFileExtensions=false /property:Configuration="Release" /property:ApplicationVersion="1.0.0.0" /property:InstallUrl="https://example.com" /property:UpdateEnabled="true" /property:UpdateMode="Foreground" /property:UpdateInterval="0" /property:UpdateIntervalUnits="days" /property:PublisherName="Example" /property:ProductName="Example Outlook Add-In" /property:FriendlyName="Example Outlook Add-In" /property:LoadBehavior="3" /property:BootstrapperEnabled="true" /property:IsWebBootstrapper="true"

:: Sign the exe
signtool sign /fd SHA1 /f "certificate.pfx" "publish\setup.exe"

:: Sign the application manifest
mage -sign "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx"
mage -update "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx" -algorithm sha1RSA

:: Sign the deployment manifests (there are 2 locations)
mage -update "publish\Application Files\Example_1_0_0_0\Example.vsto" -appmanifest "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx" -algorithm sha1RSA
mage -update "publish\Example.vsto" -appmanifest "publish\Application Files\Example_1_0_0_0\Example.dll.manifest" -CertFile "certificate.pfx" -algorithm sha1RSA

Я пробовал много настроек для этого script, и именно это я получил. Все работает отлично, если я публикую с тем же сертификатом .pfx, используя кнопку "Опубликовать сейчас" Visual Studio, но я хотел бы заставить его работать в командной строке для автоматизации.

Ответ 1

Как правильно написал user2404450, проблема не может быть решена с помощью Мага, включенного в любое обновление VS 2013. Microsoft обновила API, но не инструмент mage.exe. Если вы добавляете параметр "-algorithm sha1RSA" при вызове mage.exe, вы указываете только, какой алгоритм дайджеста использовать при создании хэшей для ваших ресурсов приложения.

Чтобы решить эту проблему, мы написали небольшой инструмент, который вызывает правильный API, см. пример:

Microsoft.Build.Tasks.Deployment.ManifestUtilities.SecurityUtilities.SignFile(certThumbprint, timestampUrl, path, "v4.0");

Вам нужно установить обновление VS 2013 Update 3, чтобы получить 4-й параметр.

Ответ 2

Я выяснил, как это сделать с помощью msbuild

У меня есть Visual Studio 2013 с установкой Update 3. Загрузите сертификаты, необходимые в хранилище, на вкладке Свойствa > Подписывание, отметив <ManifestCertificateThumbprint> в файле .csproj для каждого сертификата. Затем вы можете использовать их в командной строке следующим образом:

msbuild /target:publish /property:ManifestKeyFile="certificate.pfx" /property:ManifestCertificateThumbprint="CERTIFICATE THUMBPRINT"

Ответ 3

Вы не можете сопровождать это с помощью мага. Причина в том, что маг не обновляется, чтобы использовать новый API, добавленный в обновлении VS2013.

Однако оказалось, что новый API в VS2013 Update 3 является общедоступным, поэтому вы можете просто создать простое консольное приложение, которое использует этот API для подпишите свой код. Просто передайте "3.5" или "4.0" в качестве последнего параметра (targetFrameworkVersion), и вы настроены. Также обратите внимание, что этот метод требует, чтобы ваш сертификат присутствовал в хранилище сертификатов.