Как подписать exe файл сертификатом
Использование средства SignTool для подписания файла
Следующая команда подписывает файл с помощью сертификата, хранящегося в защищенном паролем файле PFX:
Убедитесь, что пароль правильно защищен.
Файл подписывает следующие команды и отметок времени:
Дополнительные сведения о отметке времени для файла после того, как он уже подписан, см. в разделе Добавление меток времени к ранее подписанным файлам.
Следующая команда подписывает файл с помощью сертификата, расположенного в хранилище My, с именем субъекта моей компании Publisher:
следующая команда подписывает элемент управления ActiveX и предоставляет сведения, отображаемые Internet Explorer, когда пользователю предлагается установить элемент управления:
Следующая команда подписывает файл с помощью сертификата, сведения о закрытом ключе которого защищены аппаратным модулем шифрования. Например, предположим, что сертификат с именем «мой High-Value сертификат» имеет закрытый ключ, установленный в аппаратном модуле шифрования, и сертификат установлен правильно.
Следующая команда подписывает файл с помощью сертификата, сведения о закрытом ключе которого защищены аппаратным модулем шифрования. Для хранилища центра сертификации (ЦС) указано хранилище компьютера.
Следующая команда подписывает файл с помощью сертификата, хранящегося в файле. Сведения о закрытом ключе защищаются аппаратным модулем шифрования, а поставщик служб шифрования (CSP) и контейнер ключей задаются по имени. Эта команда полезна, если сертификат установлен неправильно.
Средство SignTool возвращает текст командной строки, который указывает результат операции подписывания. Кроме того, средство SignTool возвращает нулевой код выхода для успешного выполнения, один для неудачного выполнения и два для выполнения, которые завершились с предупреждениями.
Сведения о проверке подписи файла см. в разделе Использование средства SignTool для проверки подписи файла. Дополнительные сведения о добавлении метки времени, если файл уже подписан, см. в разделе Добавление меток времени в ранее подписанные файлы. Дополнительные сведения о SignToolсм. в разделе SignTool.
Подписание файла Windows EXE
У меня есть EXE- файл, который я хочу подписать, чтобы Windows не предупредила конечного пользователя о приложении от «неизвестного издателя». Я не разработчик Windows. Рассматриваемое приложение является заставкой, созданной из приложения, которое генерирует приложения-заставки. Таким образом, я не имею никакого влияния на то, как создается файл.
Я уже узнал, что мне понадобится сертификат подписи кода от ЦС, такого как Verisign или instantssl.com. Что я не понимаю, так это то, что мне нужно сделать (если это вообще возможно), чтобы подписать мой EXE-файл. Какое простое объяснение?
Ответ Мела Грина взял меня дальше, но signtool просит меня указать, какой сертификат использовать в любом случае. Могу ли я получить бесплатный сертификат подписи кода, чтобы проверить, будет ли это работать для меня вообще?
Также, пожалуйста, укажите, какой тип сертификата является правильным. Большинство сайтов упоминают только «подписывание кода» и говорят о подписи приложений, которые фактически скомпилированы пользователем. Это не тот случай для меня.
Вы можете попробовать использовать Microsoft Sign Tool
Это подписывает один исполняемый файл, используя «лучший сертификат» из доступных. (Если у вас нет сертификата, он покажет сообщение об ошибке SignTool.)
Или вы можете попробовать:
Это запустит мастер, который поможет вам подписать ваше заявление. (Этот параметр недоступен после Windows SDK 7.0.)
Надеюсь, это предоставит больше информации для тех, кто пытается это сделать!
У меня был такой же сценарий в моей работе, и вот наши выводы
Вот плюсы и минусы 2 варианта
Купить сертификат
Создать сертификат с помощью Makecert
Подпишите исполняемый файл
Есть два способа подписать файл, который вы хотите:
Использование сертификата, установленного на компьютере
signtool.exe sign / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v «C: \ filename.dll»
Использование файла сертификата
signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f «c: \ path \ to \ mycert.pfx» / p pfxpassword «c: \ path \ to \ file.exe»
Проверьте свою подпись
Способ 1: использование signtool
Перейдите: Пуск> Выполнить Тип CMD> нажмите OK. В командной строке введите каталог, в котором существует signtool. Выполните следующее:
signtool.exe проверяет / pa / v «C: \ filename.dll»
Способ 2. Использование Windows
Щелкните правой кнопкой мыши подписанный файл. Выберите «Свойства». Выберите вкладку «Цифровые подписи». Подпись будет отображаться в разделе списка подписей.
Подпись объектного кода сертификатом от StartSSL. По шагам — заплатил, получил, подписал
StartSSL
Шаг третий — подтверждение кода из полученного письма «Tool Box» — «Submit Verification Code»
Вводим номер письма и код подтверждения. И если все правильно, то нас поздравляют и просят потерпеть до 6 часов.
Через некоторое время получаем письмо с содержимым:
«Congratulations! Your Class 2 Identity Validation has been confirmed and approved. You are eligible for certificates at Class 2 level until 2015-10-04.» — Бинго. Теперь есть возможность получить долгожданный сертификат для подписи кода!
Четвертый шаг — я заранее спросил в поддержке как делать подпись — и мне прислали ссылку на форум.
Сперва я начал делать все по первой инструкции, но не удачно. По порядку:
Устанавливаем OpenSSL — путь по умолчанию у меня — C:\OpenSSL-Win32\bin — в этой папке бинарные файлы необходимые для создания сертификата. Затем открываем командную строку и переходим в эту папку и запускаем openssl:
В процессе будут заданы вопросы:
1.Страна 2 буквы — в нашем случае: RU
2. Штат или провинция — полное название.
3. Город.
4. Название организации.
5. Название подразделения.
6. Доменное имя или Имя.
7. Адрес электронной почты.
— остальное можно не заполнять.
Для того чтобы поле оставить не заполненным можно поставить точку вместо значения.
Пароль на закрытый ключ можно не ставить, вернее его ставить не рекомендуют, хотя я поставил, плохо читал инструкцию, но проблем не заметил, главное пароль не забыть — сертификат выдается один раз.
Будет запрошен пароль для закрытого ключа, если Вы его установили, введите, затем попросит ввести пароль для экспорта ключа — оставьте пустым.
Должен создаться еще один файл codesign.pfx — которым мы будем подписывать программы.
Пятый шаг, заключительный.
Теперь мы имеем codesign.pfx в нем содержится все что нам необходимо для цифровой подписи файла.
Для подписи файла нужно выполнить такую команду.
Естественно поля нужно заполнить в соответствии с Вашими задачами.
У меня сначала возникла проблема при попытке подписи файла — оказалось утилите signtool.exe требуется capicom.dll после установки возможно придется зарегистрировать эту библиотеку в системе — запустите командную строку от имени Администратора, потом перейти в папку где находится capicom.dll и выполнить — после этого все стало работать и файлы стали подписываться.
Скриншоты подписанного файла:
Для удобства я написал небольшую утилиту в которой можно указать все данные и файлы и подписывать пачками.
Этот сертификат создается один раз, на один год. Подпись действительна в WindowsXP SP3 и выше.
Но нужно понимать — если сертификат использовать не в мирных целях — то его могут отозвать и подпись перестанет быть действительной.
Если будут вопросы добро пожаловать комментарии чем смогу — помогу. Найдете ошибки — пишите в личку.
Надеюсь этот пост поможет тем кто сомневается и не решается на такой шаг.
Как подписать программу цифровой подписью
Что такое цифровая подпись для программы
Подпись программы – это процесс добавления специального кода (электронной подписи) к исполняемым файлам и драйверам на этапе разработки.
Электронная подпись позволяет пользователям убедиться, что данная программа:
Электронная подпись для программы также может содержать информацию о версии или другие метаданные. По сути это цифровой аналог обычной рукописной подписи и печати.
Польза от подписания программ для пользователей состоит в том, что они знают, кем было опубликовано данное ПО, и что оно не было изменено. Для разработчиков же это выгодно тем, что их программам доверяют, и подделать их труднее.
Как правило, подписывается не сам исполняемый файл, а его хэш-сумма. Это позволяет уменьшить размер цифровой подписи.
Для чего используется
Электронная подпись используется в большинстве криптографических протоколов, применяется для распространения ПО, в финансовых транзакциях и других операциях, для которых важно уметь распознать случаи фальсификации.
Наиболее частое применение подписи программного кода – обеспечение безопасности при установке программы. Например, файлы обновлений операционных систем содержат подписи компании-разработчика, чтобы принимающая система могла убедиться в целостности файлов и в том, что они действительно созданы данным производителем, даже если обновления доставляются через третьи лица (скачиваются с сайта дистрибьютора или устанавливаются с дисков).
Как получать цифровую подпись для программы
Электронные подписи создаются с помощью алгоритма подписи с открытым ключом, например, RSA. В алгоритме с открытым ключом на самом деле используются два различных ключа: открытый и закрытый. Закрытый ключ знает только его владелец, а открытый ключ доступен всем. В технологии электронной подписи с помощью закрытого ключа генерируется подпись, а соответствующий ему открытый ключ используется для её проверки.
Чтобы получить электронную подпись, необходимо обратиться в специальный центр сертификации (или удостоверяющий центр). Центр сертификации выдаёт ключи (закрытый и открытый) и сертификат (собственно подпись).
С помощью закрытого ключа разработчик вычисляет хэш-сумму своего кода (в специальном ПО или через веб-сайт), прикрепляет хэш-сумму и сертификат к коду и компилирует его – получается подписанная программа.
Помимо выдачи ключей и сертификатов, центр сертификации отзывает истёкшие или скомпрометированные сертификаты и ведёт соответствующие базы данных.
Существует также вариант, при котором разработчик внедряет в код свою собственную, личную подпись. Конечному пользователю в этом случае необходимо получить открытый ключ непосредственно у разработчика, чтобы выполнить проверку ПО при первом запуске.
Кроме программной реализации цифровой подписи, существует также её аппаратная реализация (например, с помощью смарт-карт, USB-токенов и т.п.).
Однако само по себе наличие цифровой подписи в программе не гарантирует, что последняя безопасна. Наличие подписи говорит о том, что программа была получена из данного источника и не была изменена после того, как была подписана. Доверять источнику программы или нет, решает сам пользователь.
Лицензирование программ
Лицензирование позволяет из написанной программы сделать продукт, пригодный для продажи. Как и с цифровой подписью, разработчик может попытаться создать собственные механизмы или подключиться к существующим системам. Как правило, такие системы позволяют оперативно запустить продажи на основе распространения дистрибутива и серийных номеров, а также обеспечивают защиту от копирования, взлома и модификации.
Тегирование EXE файлов без повреждения цифровой подписи
Мы хотим рассказать о нашем опыте исследования цифровых подписей Windows PE файлов и возможном варианте использования их особенностей в своих целях. Если вам интересны технические подробности или просто чтиво о, казалось бы, давно известных вещах, добро пожаловать под кат.
User Account Control
Многие из вас знают, что с приходом Windows Vista, появилась такая интересная вещь под названием UAC (User Account Control). Этот механизм сделан для повышения безопасности, и его суть заключается в ограничении доступа приложений к критически важным частям операционной системы. Однако возможность добраться до этих частей всё-таки существует, и контроль над этим есть у пользователя.
Любое Windows приложение может содержать манифест – XML файл, используемый Windows при запуске приложения. В этом манифесте может быть описано требование для запуска приложения с повышенными привилегиями, и в этом случае при запуске приложения пользователь увидит то самое UAC окно с вопросом – а стоит ли доверять приложению и позволить ему запуститься с максимальными правами?
Для того, чтобы облегчить пользователю задачу на данном этапе, а разработчикам позволить быть уверенными в целостности и оригинальности передаваемых файлов, Microsoft предлагает авторам легального и безвредного ПО использовать цифровые подписи. Они удостоверяют автора, и, что более важно, подлинность оригинального файла.
Видя запрос на запуск с информацией о проверенном издателе, пользователь может быть уверен, что содержимое исполняемой части этого файла не изменилось, и его можно запускать с чистой совестью (если он, конечно, доверяет этому автору). Однако при запросе на запуск приложения от непроверенного издателя, стоит задуматься, проанализировать возможные причины и последствия.
Ближе к теме
Но что, если мы (авторы этих приложений) хотим передавать в них какую-либо дополнительную информацию, которая будет известна только в момент скачивания? Ведь любое изменение файла автоматически делает цифровую подпись недействительной. Какие у нас есть варианты?
Немного теории
Ниже представлена структура Windows PE файла с информацией о том, из каких его частей формируется цифровая подпись, а какие блоки пропускаются в этом процессе.
Также показан формат блока цифровой подписи (структура PKCS#7), используемый Microsoft.
Ключевой момент в этой схеме — наличие блоков, исключаемых при генерации и проверке цифровой подписи. Эти блоки описываются простейшими C структурами:
«Таблица сертификатов» в секции «Директории данных» – это структура IMAGE_DATA_DIRECTORY:
Невозможное возможно
Фокус заключается вот в чём: размер секции, описанный в IMAGE_DATA_DIRECTORY может отличаться от фактического размера структуры WIN_CERTIFICATE, а при проверке цифровой подписи исключается вся секция, размер которой описан в IMAGE_DATA_DIRECTORY. При этом добавленное вручную содержимое в эту секцию уже не является частью цифровой подписи и по сути может содержать любой набор данных. Таким образом можно с легкостью добавлять любые данные в содержимое блока «Атрибуты таблицы сертификатов», предварительно изменив размер секции в структуре IMAGE_DATA_DIRECTORY, не повредив при этом цифровую подпись файла. Не забывайте про паддинг файла до размера, кратного 8 байтам.
Вы должны понимать возможные последствия при использовании этого метода, иметь в виду тип передаваемых данных, объем, возможную их обработку и потенциальные дыры, связанные с этим. В ваших же интересах передавать там только такую информацию, которую можно безболезненно (в случае, если кто-то захочет это сделать намеренно), но при этом не потерять основную функциональность.
«Конечно, а как же контрольная сумма PE файла?» — спросите вы. Спешу вас успокоить — она не играет никакой роли при запуске и работе обычных EXE файлов. Контрольная сумма проверяется только на критически важных системных файлах, например на неё ориентируется сервис System File Checker (для диагностики пропавших или повреждённых системных файлов).
В качестве заключения: кто и как этим пользуется?
Эту возможность использует Google при распространении своих продуктов через автоматический апдейтер Google Omaha. Возможно, вы замечали, что при загрузке Google Chrome или Google Earth, вам предлагают сделать некоторые настройки ещё перед скачиванием, например, установить вместе с Earth браузер Chrome. Эти настройки передаются как раз с помощью тегирования дистрибутива — процесса дописывания данных в EXE файл, которые Omaha в дальнейшем обрабатывает на локальной машине пользователя.
Также эту возможность удобно использовать в различных партнёрских сетях – отдача дистрибутивов с трекингом партнёра — необходимость в различных компаниях.
Механизм по отдаче файлов с веб-сервера с использованием этой фичи может быть реализован с помощью самописного плагина для nginx, виртуальной файловой системы на основе FUSE, или ещё каким-нибудь более экзотическим способом (расскажите в комментах, если придумали свой вариант).
Информацию о цифровых подписях PE файлов можно почерпнуть из этого документа: Windows Authenticode Portable Executable Signature Format.