Чтение подписи исполняемой сборки pfx/cert

Это академический вопрос, пытающийся понять новый материал. Не академический в смысле формальной школы, а в смысле непрерывного образования и желания разобраться в области развития, с которой я раньше не сталкивался.

Итак, в моем понимании я создаю сборку и, «подписав ее», я создал строгое имя / X509Certificate.

Поэтому я создаю пустой winapp. Захожу в свойства проекта на вкладку подписание и подписываю сборку паролем.

В мой проект добавлен файл testing.pfx.

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

Assembly ass = Assembly.GetExecutingAssembly();
Module mod = ass.GetModules().First();
X509Certificate cert = mod.GetSignerCertificate();

сертификат нулевой. Почему это? Я делаю что-то не так, чтобы получить сертификат, или у меня что-то перепуталось в голове, и то, что я ищу, находится не там, где я ищу?

Спасибо


Редактировать

@p e p Я использовал следующее после прочтения вашего сообщения и msdn.

Знак signtool /a C:/....../MyFile.exe

знак signtool /f C:/....../MyCert.pfx /p MyPassword C:/....../MyFile.exe

Оба сказали, что завершили успешно. Однако выполнение приведенного выше блока кода по-прежнему создает нулевой сертификат.

Теперь, что я, возможно, пропустил или делаю неправильно, так это то, что я работаю с отладочной версией Visual Studio, и это путь к exe-файлу, который я использовал для подписи.

c:....\LicensedControlTest\obj\x86\Debug


person GPGVM    schedule 08.11.2014    source источник
comment
Есть два разных вида подписи, которые часто путают. Подпись строгого имени и подпись кода (например, цифровая подпись, такая как Authenticode). См. раздел это. Сертификат присутствует только для последнего вида подписи. Вы просто применили строгое имя к сборке.   -  person Mike Zboray    schedule 08.11.2014
comment
@mikez Спасибо. Статья Эрика помогла объяснить различия.   -  person GPGVM    schedule 09.11.2014


Ответы (1)


Вам необходимо подписать сборку Authenticode. Это можно сделать с помощью средства подписи файлов (Signcode.exe), которое подпишет вашу сборку подписью Authenticode. По сути, вы просто запускаете команду, используя signcode, которая подпишет вашу сборку Authenticode.

Если вы посмотрите на документ для GetSignerCertificate, вы увидите, что null ожидается, если сборка не подписана аутентификацией.

signcode /spc myCertificate.spc /v myKey.pvk  myAssembly

Это основы, вы можете найти дополнительную информацию здесь, в MSDN http://msdn.microsoft.com/en-US/library/9sh96ycy(v=vs.80).aspx.

person p e p    schedule 08.11.2014
comment
См. редактирование. Я уверен, что вы на 100% правы, и я просто делаю что-то не так. - person GPGVM; 10.11.2014