SignTool не подписывает приложение ClickOnce с использованием SHA256, использует только SHA1

Я пытаюсь подписать свое приложение clickonce. У меня есть сертификат подписи кода EV, который использует SHA256. Проблема в том, что когда я подписываю свое приложение с помощью команд пост-сборки, кажется, что оно использует SHA1 вместо SHA256. Вот фрагмент окна вывода:

Running Code Analysis...
1>  Code Analysis Complete -- 0 error(s), 0 warning(s)
1>  The following certificate was selected:
1>      Issued to: Certificate Subject Name Here
1>  
1>      Issued by: DigiCert EV Code Signing CA (SHA2)
1>  
1>      Expires:   Thu Apr 14 06:00:00 2016
1>  
1>      SHA1 hash: HASH-HERE
1>  
1>  
1>  Done Adding Additional Store
1>  Successfully signed and timestamped: C:\Users\AnyBody\Documents\Visual Studio 2013\Projects\My Project\Project Folder\obj\x86\My Configuration\MyProgram.exe
1>  
1>  
1>  Number of files successfully Signed: 1
1>  
1>  Number of warnings: 0
1>  
1>  Number of errors: 0

Вот команда пост-сборки, которую я использую:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /fd SHA256 /t "http://timestamp.digicert.com" /n "Certificate Subject Name Here" /v "$(ProjectDir)obj\x86\$(ConfigurationName)\$(TargetFileName)"

Когда я смотрю на свойства файла, я вижу, что к MyProgram.exe.deploy прикреплена цифровая подпись.

Когда я запускаю signtool / verify, ошибки не возвращаются

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

В деталях сообщения об ошибке есть такая строка:

+ File, MyProgram.exe, has a different computed hash than specified in manifest.

Когда я открываю и просматриваю манифест, хеш MyProgram.exe указывается как SHA256.

В чем может быть проблема? Что заставляет signtool отказываться от использования SHA256? Из того, что я читал, по умолчанию должен использоваться SHA256.

Я удалил / переустановил визуальную студию, windows sdk, все установленные библиотеки .net безрезультатно.

Я очень надеюсь, что у кого-то есть идеи ...


person smitty1    schedule 18.02.2014    source источник


Ответы (1)


У вас возникла проблема с приложением WPF? Если это так, подпись исполняемого файла в цели AfterCompile должна решить вашу проблему. У меня это сработало.

Более подробное обсуждение этого можно найти здесь:

Очевидно, когда Фил подписывает свой исполняемый файл с помощью команд PostBuild или BeforePublish, когда пользователь устанавливает его, он получает ужасную ошибку «exe имеет другой вычисленный хэш, чем указано в манифесте». Он обнаружил, что вместо этого проблема была решена с помощью AfterCompile.

http://robindotnet.wordpress.com/2013/04/14/windows-8-and-clickonce-the-definitive-answer-revisited/

person user1592890    schedule 19.02.2014
comment
Это правильно ... часть проблемы заключалась в том, что исполняемый файл подписывался после создания манифестов, что приводило к тому, что исполняемый файл имел хэш, отличный от указанного в манифесте. Это также можно решить, используя инструмент мага для обновления манифестов после публикации. Другая вещь, вызывающая путаницу, - это ссылка на хеш SHA1. Оказывается, SHA1 был ссылкой на отпечаток сертификата, а не показателем того, что приложение подписывалось с использованием SHA1. - person smitty1; 05.03.2014
comment
В интересах других пользователей, если вы хотите использовать сертификаты SHA256 для подписи кода и подписи манифеста, вам необходимо использовать по крайней мере версии .NET Framework 4.5 SignTool.exe (средство подписи) и Mage.exe (средство создания и редактирования манифеста). Похоже, что предыдущие версии поддерживают только SHA1. - person AlwaysLearning; 11.09.2014