Как я могу подписать исполняемый файл цифровой подписью? - PullRequest
24 голосов
/ 27 июня 2010

Я пишу программное обеспечение, которое требует административного доступа. Когда появляется диалоговое окно UAC, оно показывает другое всплывающее окно для программного обеспечения с цифровой подписью, чем для неподписанного программного обеспечения. Я считаю, что цифровая подпись моего программного обеспечения позволит пользователям доверять моему программному обеспечению проще. Стоит ли платить тысячи долларов за цифровую подпись программного обеспечения или это бесплатно? Есть ли простой способ сделать это? Я искал в Google, и все, что я получаю, это как подписывать файлы PHP, XML и PDF, а это не то, что я хочу. Мне нужно подписать исполняемый файл моего программного обеспечения.

Только что видел что-то про sigtool.exe? Это правильное направление? А как насчет тех сложных файлов .pfx и Authenticode или что нет?

Ответы [ 4 ]

19 голосов
/ 28 июня 2010

Как уже упоминалось в других ответах, вам сначала необходимо приобрести сертификат, подходящий для подписи кода. Это будет стоить несколько сотен долларов, а не тысячи. Когда я недавно обновил сертификат своей компании с помощью Globalsign , было также проведено расследование, чтобы проверить, была ли компания законной - поскольку я использовал номер мобильного телефона для процесса регистрации, они хотели получить письмо от бухгалтера компании для проверки что мы настоящий бизнес.

Чтобы подписать исполняемый файл, я использую задачу MSBuild. Вот выдержка из соответствующих частей:

<!--
Installer files that need to be signed.
-->
<ItemGroup>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\myinstaller.msi"/>
  <InstallerSignedFiles Include="$(BuildRoot)path\to\setup.exe"/>
</ItemGroup>

<Target Name="ReleasePackaging">
  <!-- Sign the files we're going to release -->
  <SignTool
      CertificateStoreName="My"
      CertificateSubjectName="MyCompany"
      Description="My application description"
      TimestampServerUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
      TargetFiles="@(InstallerSignedFiles)"
     />
</Target>

Для того, чтобы это работало, как указано выше, вам необходимо установить сертификат в вашем личном хранилище сертификатов (см. CertificateStoreName="My" в приведенном выше примере). На веб-сайте Globalsign эта установка была автоматической частью процесса загрузки сертификата. Примечание: я обнаружил, что это помогает использовать Internet Explorer при загрузке сертификата, поскольку он интегрирован с хранилищем сертификатов Windows. Как только он окажется в хранилище сертификатов на загрузочном компьютере, вы можете экспортировать его в виде файла pfx , перенести на свой компьютер сборки и импортировать на него. Если вы экспортируете его, я бы посоветовал вам защитить экспортированный файл паролем на случай, если он попадет в чужие руки.

Когда вы используете задачу SignTool MSBuild, как указано выше, она считывает сертификаты из личного хранилища («Мое»), связанного с текущей учетной записью пользователя Windows. Это означает, что вы можете контролировать, кто может подписывать код с вашим сертификатом, что является хорошей вещью. Вы должны импортировать сертификат только в личный магазин разработчиков, которому вы доверяете.

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

11 голосов
/ 29 июня 2010

Вам понадобится утилита командной строки для подписи кода от Microsoft.

А затем:

signtool.exe sign /v /f "MyCertificate.pfx" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"

или альтернативно

signcode.exe -a "sha1" -spc "MySoftwarePublishingCertificate.spc" -v "MyPrivateKeyFile.pvk" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"
4 голосов
/ 27 июня 2010

Я здесь никого не продаю, но попробую VeriSign .Они предлагают Подписание кода , что вы ищете.

1 голос
/ 27 июня 2010

Возможно, вы захотите прочитать Подписание и проверка кода с помощью Authenticode .

...