Цифровая подпись сборки .NET со строгим именем

У меня есть сборка .NET, которую я строго назвал, чтобы поместить ее в GAC. Однако эта же сборка также имеет цифровую подпись с использованием файла .pfx позже для цифровой подписи.
Я заметил, что эта сборка с такой двойной подписью не проходит проверку строгого имени и не устанавливается в GAC целевой машины.

Возможно ли, что процедура цифровой подписи удаляет процедуру строгого именования, созданную с помощью ключа SN?

Цифровая подпись важна, и если 2 несовместимы, то можно ли вместо этого подписать файл .pfx файлом так же легко, как процесс присвоения имен SN?

Кроме того, сборка находится в C++/CLI, а не в C#.

РЕДАКТИРОВАТЬ: при просмотре Документация MSDN, в ней говорится, что при использовании параметров компоновщика для строгого именования и при использовании инструмента пост-обработки, такого как mt.exe (я не уверен, что Signtool.exe входит в число этих инструментов), сборку необходимо будет отправить в отставку.

Также это заявление:

Если вы используете атрибуты подписи при сборке в среде разработки, вы можете успешно подписать сборку, явно вызвав sn.exe (Sn.exe (средство строгого имени)) в событии после сборки.

... немного сбивает с толку. К каким атрибутам он относится: к CLR атрибутам или Linker параметрам?


person user1173240    schedule 08.05.2015    source источник


Ответы (2)


Они совместимы и должны применяться в определенном порядке:

  1. Строгое имя (sn.exe)
  2. Authenticode / кодовая подпись / цифровая подпись (signtool.exe)

Я делаю это регулярно, без проблем со сборками C #. Я не знаю, что для C ++ все будет иначе.

Это работает, потому что хэш-код строгого имени не включает определенные части PE-заголовка, включая хеш-код аутентификации. Как здесь объясняется, здесь.

person Lars Truijens    schedule 08.05.2015
comment
В документации говорится, что сборку следует повторно подписать с помощью инструмента SN, если после сборки будет использоваться инструмент постобработки, такой как mt.exe. Я использую параметры компоновщика для подписи сборки. После использования signtool.exe на собранной (и строго подписанной) сборке он теряет свое свойство строгого имени ... что-то связанное со средой сборки VC ++ - msdn.microsoft.com/en-us/library/vstudio/? Кажется, это характерно для CLI. В таком случае, как мне действовать? - person user1173240; 11.05.2015

Мы создаем несколько сборок C ++ / CLI. Мы используем переключатели компоновщика:

  • / KEYFILE - выбрать файл snk с открытым ключом
  • / DELAYSIGN - указать отложенное подписание

Затем, в событии после сборки, мы вызываем sn.exe для применения тестовой подписи.

Позже, непосредственно перед включением сборки в модуль слияния, мы вызываем:

  • sn.exe - чтобы применить настоящую подпись строгого имени
  • signtool.exe - для применения подписи Authenticode

Вы должны иметь возможность использовать только / KEYFILE, чтобы указать файл snk, содержащий вашу пару ключей, а затем просто вызвать signtool для выполнения подписи Authenticode.

Если вы не используете какой-либо другой инструмент после сборки, это должно сработать.

person James Rustad    schedule 20.04.2017