Как уже упоминалось в других ответах, вам сначала необходимо приобрести сертификат, подходящий для подписи кода. Это будет стоить несколько сотен долларов, а не тысячи. Когда я недавно обновил сертификат своей компании с помощью 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. Это означает, что вы можете контролировать, кто может подписывать код с вашим сертификатом, что является хорошей вещью. Вы должны импортировать сертификат только в личный магазин разработчиков, которому вы доверяете.
Рекомендуется использовать сервер отметок времени при подписании кода, чтобы вам не нужно было переподписывать код после истечения срока действия сертификата.