2013-06-28 3 views
3

Я чувствую, что это не должно быть так тяжело, но я схожу с ума, пытаясь заставить его работать. Я нашел много разных вещей, чтобы попытаться, и ничто, кажется, не работает.Подпись кода на C# с pfx

Я пытаюсь подписать сборку WPF, используя файл .pfx. Если я попытаюсь использовать исходный файл, я получаю «Не могу найти сертификат и закрытый ключ для дешифрования».

Если я импортирую ключ и экспортирую его снова, выбрав «Включить все сертификаты в путь сертификата, если это возможно», похоже, что это работает. Когда я иду на сборку, я получаю сообщение «Ошибка 1 Не могу импортировать следующий файл ключей: my_key.pfx. Ключевой файл может быть защищен паролем. Чтобы исправить это, попробуйте снова импортировать сертификат или вручную установить сертификат в сильное имя CSP со следующим именем контейнера: «

Я могу подписать манифест ClickOnce отлично, только не сборку. Любые предложения о том, как сделать эту работу?

+0

Как раз для того, чтобы начать сузить дело, вы пытались подписаться с другим файлом pfx? Это поможет показать, возможно ли это действительно странная ошибка VS или что-то уникальное в вашем исходном файле pfx. –

+0

Я пробовал тестовый ключ, созданный VS, и он работает. Это действительно единственный тип ключа, который у меня есть. – thecaptain0220

+0

Вот шаг за шагом о том, как создать собственный файл pfx, используя два инструмента командной строки от Microsoft (http://msdn.microsoft.com/en-us/library/ff699202.aspx). Вы хотите начать следовать инструкциям во втором заголовке («Создать тестовый сертификат») –

ответ

6

У меня были подобные проблемы, и после многих лет разработки C# в (VS 2005 по 2012 год) никогда не удалось найти способ использования .pfx-файла из центра сертификации для обозначения кода из свойств проекта. Существуют атрибуты сборки и параметры проекта для подписи кода, все из которых, похоже, мешают друг другу, и ни одна из них не работает. В свойствах проекта запрашивается пароль для pfx (который, похоже, не хранится нигде), а затем подписание происходит с ошибкой, потому что пароль сломан. Я подозреваю, что никто в MS никогда не использовал эту функцию для подписания кода с купленным сертификатом, только с сертификатами самоподписывания, которые VS создал локально.

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

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

При покупке сертификата он будет обычно установлен непосредственно в хранилище сертификатов вашего компьютера, так что вы можете закодировать подписывать с ним непосредственно из магазина на этапе после сборки, что-то вроде этого:

"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign 
    /n CertificateName 
    /tr http://timestamp.comodoca.com/rfc3161 
    "$(TargetPath)" 

Примечания:

  • Вам может понадобиться для поиска, чтобы найти, где signtool.exe находится на вашем компьютере, и использовать один в самой последней версии SDK вы можете найти, чтобы получить до даты версии - вы должны использовать полный путь в команде post-build для работы
  • «Имя сертификата» - это имя приобретенного сертификата в вашем личном магазине сертификатов
  • URL-адрес здесь является примером (в данном случае для сервера timestamp Comodo), просто измените его на сервер у своего собственного провайдера

Или сделать это с помощью PFX-файл:

"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign 
    /f CertificateFile.pfx /p Password 
    /tr http://timestamp.comodoca.com/rfc3161 
    "$(TargetPath)" 

(где CertificateFile.pfx является файл PFX, и "Password" пароль для использования файла. Чтобы получить файл pfx из хранилища сертификатов, запустите «certmgr.msc» и найдите сертификат (возможно, в Личном \ Сертификаты), щелкните его правой кнопкой мыши и выберите «Все задачи> Экспорт ...»)

Super easy.Почему никто нигде в Интернете (например, сертификационные органы, которые продают вещи) просто говорят это в первую очередь ?!

+1

Раньше я мог подписываться с нашим старым .pfx-файлом (для ClickOnce и Strong Name) - после истечения срока действия и продления (через GoDaddy), я не могу понять, как я больше создал файл .pfx. С новыми, которые я получил/перестроил, он перестает работать. Тьфу. – BrainSlugs83