- Catdb command options
- Examples
- Parameters
- Return value
- Sign command options
- Start powershell
- Timestamp command options
- Verify command options
- Войти исполнимый
- Все о подписи драйверов windows
- Для электромобилей код подписывая, прикрепите свой usb-токен к компьютеру (если вы еще этого не сделали).
- Другие варианты
- Зачем нужна цифровая подпись
- Используйте файл pkcs # 12 / pfx
- Как подписывать инсталляции в инсталляторе createinstall
- Как получить цифровую подпись
- Подписание файла windows exe
- Проверить подпись
- Укажите имя темы
- Укажите хэш sha1
- Установить windows sdk и signtool
Catdb command options
The following table lists the options that can be used with the catdb command.
| Catdb option | Description |
|---|---|
/d | Specifies that the default catalog database is updated. If neither the /d nor the /g option is used, Sign Tool updates the system component and driver database. |
/gGUID | Specifies that the catalog database identified by the globally unique identifier GUID is updated. |
/r | Removes the specified catalogs from the catalog database. If this option is not specified, Sign Tool adds the specified catalogs to the catalog database. |
/u | Specifies that a unique name is automatically generated for the added catalog files. If necessary, the catalog files are renamed to prevent name conflicts with existing catalog files. If this option is not specified, Sign Tool overwrites any existing catalog that has the same name as the catalog being added. |
Examples
The following command adds the catalog file MyCatalogFileName.cat to the system component and driver database. The /u option generates a unique name if necessary to prevent replacing an existing catalog file named MyCatalogFileName.cat.
The following command signs a file automatically by using the best certificate.
The following command digitally signs a file by using a certificate stored in a password-protected PFX file.
The following command digitally signs and time-stamps a file. The certificate used to sign the file is stored in a PFX file.
The following command signs a file by using a certificate located in the My store that has a subject name of My Company Certificate.
Parameters
| Argument | Description |
|---|---|
command | One of four commands (catdb, sign, Timestamp, or Verify) that specifies an operation to perform on a file. For a description of each command, see the next table. |
options | An option that modifies a command. In addition to the global /q and /v options, each command supports a unique set of options. |
file_name | The path to a file to sign. |
The following commands are supported by Sign Tool. Each command is used with distinct sets of options, which are listed in their respective sections.
Return value
Sign Tool returns one of the following exit codes when it terminates.
| Exit code | Description |
|---|---|
| 0 | Execution was successful. |
| 1 | Execution has failed. |
| 2 | Execution has completed with warnings. |
Sign command options
The following table lists the options that can be used with the sign command.
Start powershell
Начать Powershell командное окно, выполнив поиск «Powershell» в Start меню и нажав на рабочем столе приложения.
Powershell – это интерфейс командной строки для основных служб Windows. Вы можете использовать его для выполнения SignTool и подписания кода.
Timestamp command options
The following table lists the options that can be used with the TimeStamp command.
| TimeStamp option | Description |
|---|---|
/p7 | Time stamps PKCS #7 files. |
/tURL | Specifies the URL of the time stamp server. The file being time stamped must have previously been signed. Either the /t or the /tr option is required. |
/tdalg | Used with the /tr option to request a digest algorithm used by the RFC 3161 time stamp server. Note: A warning is generated if the /td switch is not provided while timestamping. The default algorithm is SHA1, but SHA256 is recommended. The /td switch must be declared after the /tr switch, not before. If the /td switch is declared before the /tr switch, the timestamp that is returned is from the SHA1 algorithm instead of the intended SHA256 algorithm. |
/tpindex | Time stamps the signature at index. |
/trURL | Specifies the URL of the RFC 3161 time stamp server. The file being time stamped must have previously been signed. Either the /tr or the /t option is required. |
For a usage example, see Adding Time Stamps to Previously Signed Files.
Verify command options
For usage examples, see Using SignTool to Verify a File Signature.
Войти исполнимый
Вы можете подписать исполняемый файл, введя следующую команду в окне Powershell.
. signtool.exe sign / fd sha256 / a "C: path to MyExecutable.exe"
Примечание: Если вы подписываете файлы кода, которые будут включены в установщик (например, файл Windows MSI), вам нужно будет подписать эти файлы перед сборкой установщика, а затем подписать сам файл установщика.
Все о подписи драйверов windows
Как известно в х64 битных платформах была введена процедура обязательной цифровой подписи всего того, что может попасть в ядро системы, а именно драйверов. О том, на сколько это эффективно и оправданно можно долго спорить, но только одно можно сказать точно — гимора разработчикам тут определенно добавилась, особенно тем, кто раньше никогда подписями не занимался. Также для многих стало крайне не очевидно, каким образом разрабатывать драйвер, когда нет на руках валидного сертификата, а тестировать ведь как-то надо. Вот сча я попытаюсь в краткой и доступной форме рассказать о том как это все делается.
Итак, прежде всего, я бы хотел выделить два типа сертификатов, которые я буду рассматривать в рамках данной статьи — тестовый и настоящий. Разница состоит в том, что настоящий сертификат подписан доверенным CA (Certification Authorities — доверенный издатель), типа VeriSign, GlobalSign ну или самим Microsoft, а тестовый подписан самопальным сертификатом типа от Васи Пупкина.
Тестовый сертификат
Как вы уже наверное догадались, именно с помощью этого типа сертификата можно спокойно разрабатывать драйвер, не имея на руках настоящего, но все не так просто, прежде чем его использовать надо проделать некоторые унылые и мудреные мероприятия:
- Сгенерить сам сертификат и установить его. Это можно сделать с помощью тулзы makecert, например так:
Makecert -r -pe -ss PrivateCertStore -n "CN=TestCertforWDK" TestCert.cer
где
PrivateCertStore — название хранилища
TestCertforWDK — название самого сертификата
TestCert.cer — имя файла с сертификатом
(эта тулза входит в комплект WDK 6000/6001 и расположена bin/SelfSign, в WDK 7600 она почему то не входит…) - Добавить этот сертификат в хранилище с доверенным корневыми CA. Открываем в mmc консоль Сертификаты (Run->mmc->File->Add/Remove Snap-in->Certificates) там находим свой сертификат (например в хранилище PrivateCertStore), копируем его в доверенные корневые издатели (Trusted Root Certification Authorities).
- Разрешить тестовые подписи. Для этого прописываем в администраторской консоли:
bcdedit.exe –set TESTSIGNING ON
и перезагружаемся, в итоге на десктопе, после перезагрузки, по углам красоваться соответствующие надписи.
Настоящий сертификат
Тут тоже не все так просто. Дело в том, что не любой CA может выдавать сертификаты для подписи драйверов Windows, а только те, которые авторизованы самой Microsoft, это значит, что корневые сертификаты этих издателей должны быть подписаны Microsoft — что, как раз и выражается в виде этого кросс-сертификата. Вот именно из-за отсутствия кросс-сертификата — тестовая подпись, никогда не будет работать как настоящая. Список доверенных CA, которые обладают такими кросс-сертификатами — представлен тут, там же можно скачать и сами кросс-сертификаты.
После того, как вы выложите несколько сотенок $$$ доверенному центру сертификации, они выдадут вам .pfx файл в котором будут содержаться публичный и приватный ключи. Вы его запустите и с помощью нехитрого диалога (как на рисунке ниже), установите в систему.
Подпись драйвера
Процесс подписи для тестового и настоящего сертификата во многом похожи, различия состоят лиш в том, что:
Итак приступим
- Качаем тулзу для подписи — signtool (тоже входит в комплект WDK6000/6001)
- Подписываем, с тестовым сертификатом:
signtool sign /v /s PrivateCertStore /n "TestCertforWDK" driver.sys
где
PrivateCertStore — имя хранилища
TestCertforWDK — имя тестового сертификата
driver.sys — имя драйверас настоящим сертификатом:
signtool sign /v /ac MSCV-GlobalSign.cer /s PrivateCertStore /n "YourTrueCertName" /t http://timestamp.globalsign.com/scripts/timstamp.dll driver.sys
где
MSCV-GlobalSign.cer — имя кросс-сертификата
YourTrueCertName — имя настоящего сертификата
timestamp.globalsign.com/scripts/timstamp.dll — адрес таймстампингового центра, в моем случае global sign
Далее драйвер можно установить программно с помощью специальных АПИ либо с помощью замечательной тулзы
KmdManager
.
Подпись пакета драйверов
В реальной жизни подписи самого драйвера оказывается недостаточно, дело в том, что драйвера устройств как правило поставляются в комплекте с inf-файлом, в котором содержится информация о драйвере и устройствах которые он обслуживает. В этом случае необходимо будет сгенерить cat-файл, который содержит в себе инфу о всех файлах пакета, а потом подписать его точно также, как подписывали драйвер.
Для генерации cat-файла и его подписи нам понадобится:
- Корректный inf-файл (запасайтесь бубнами ребятки)
- Тулза которая генерит этот cat-файл из inf-файлов — inf2cat (эта тулза входит в комплект WDK6001/7600, и написана, как не странно, на .NET)
- После чего генерим cat-файл, например так
inf2cat.exe /driver:releaseamd64 /os:Vista_x64,Server2003_x64,Server2008_x64
где
releaseamd64 — папка в которой находится inf-файл и драйверы
Vista_x64,Server2003_x64,Server2008_x64 — список ОС, на которых должен работать драйвер - Подписываем его точно также, как и драйвер
signtool sign /v /ac MSCV-GlobalSign.cer /s PrivateCertStore /n "YourTrueCertName" /t http://timestamp.globalsign.com/scripts/timstamp.dll catalog.cat
сам драйвер при этом подписывать не обязательно. - Проверяем, что все хорошо подписалось, для этого открываем свойство .cat файла (или драйвера) и смотрим вкладку Digital Signatures — если есть то можем полюбоваться на результат, если нет, то где-то накосячили.
Также более достоверно можно проверить с помощью командной строкиsigntool verify /pa /v /c catalog.cat
EasySign
В результате всех моих исследований на предмет САБЖ-а, я некатал по-быстрому простенькую программку EasySign, которая может подписывать дрова без дополнительного гимора с командной строкой и bat-файлами. Возможно кому-то будет полезно.
Саму прогу можно скачать тут, а мануалку почитать ниже:
- Вбиваем в Inf Dir путь к папке где лежит сам .inf файл и все необходимые файлы к нему прилагающиеся.
- Выбираем ОСи где работает драйвер.
- Cross Cert — указываем путь к кросс-сертификату, если нужно подписать драйвер по-настоящему
- Cert Store — названия хранилища, где лежит наш сертификат (например PrivateCertStore)
- Cert Name — название сертификата (например TestCertforWDK), если сертификат один в хранилище, то можно и не заполнять это поле.
- Time Stamp — адрес таймстампингового центра, для тестового сертификата — можно оставить пустым
- Файлы которые надо подписать, тут нужно обязательно добавить cat файл (если еще не создан, то прописать его имя вручную), а также можно добавить все файлы драйверов
- Generate Catalog Only — если подписывать не надо, а только создать .cat файл
- Жмем Sign — чтобы создать cat-файл и подписать, жмем Log — чтобы почитать что произошло, часто бывают ошибки, например неправильно составлен inf-файл, либо signtool чего-то не нашел и т.п.
Литература по теме
http://msdn.microsoft.com/en-us/library/ff544865(VS.85).aspx
Для электромобилей код подписывая, прикрепите свой usb-токен к компьютеру (если вы еще этого не сделали).
Помните, что закрытый ключ существует только на USB-токене, который был отправлен вам, и что токен должен быть прикреплен на компьютер, который используется для подписи приложения. Этот шаг следует пропустить, если вы используете сертификат подписи кода OV.
Другие варианты
Другие важные параметры SignTool:
Использование всех вышеперечисленных опций (но без /a, /sha1 или /f потому что мы указываем имя субъекта сертификата с помощью /nнаша командная строка выглядит так:
Зачем нужна цифровая подпись
Цифровая подпись предназначена для того, чтобы указать автора программы и показать, что данная программа или файл не был изменен другими лицами. Если кто-то попробует модифицировать подписанную программу, то цифровая подпись сразу становится недействительной. Это главное предназначение цифровой подписи.
Второе преимущество подписанных программ и инсталляций состоит в том, что антивирусные программы более лояльно относятся к подписанным приложениям. Ложные срабатывания и необоснованные попадания в карантин у подписанных программ встречаются реже.
Также сравните сообщения, которые показывает UAC при запуске подписанной и неподписанной инсталляции. Сообщение для подписанной инсталляции вызывает больше доверия у пользователя.
Используйте файл pkcs # 12 / pfx
Если у вас есть сертификат подписи кода и закрытый ключ в файле PKCS # 12 (также известном как файл PFX или P12), вы можете указать файл и его пароль в командной строке:
. signtool.exe sign / fd sha256 / f "C: path to MyCertificate.pfx" / p пароль "C: path to MyExecutable.exe"
Как подписывать инсталляции в инсталляторе createinstall
Конечно, можно самостоятельно подписывать инсталляции созданные CreateInstall, но лучше автоматизировать этот процесс. К тому же, наш инсталлятор позволяет подписывать uninstall.exe и update.exe, которые будут потом распакованы при установке вашей программы на компьютер пользователя.
Рассмотрим следующее решение с использованием утилиты kSignCMD.exe, которая входит в программу kSign. Создайте .bat файл примерно следующего содержания и сохраните его в секретном месте. Самое главное, чтобы он был доступен в момент сборки вашего дистрибутива. [pfxfile] замените на полный путь к вашему .pfx файлу, а [password] замените на ваш пароль.
Команда pause нужна, чтобы вы могли вовремя обнаружить ошибку, которая может возникнуть при попытке подписать приложение. С другой стороны, из-за этой команды вам придется нажимать на какую-нибудь клавишу для продолжения процесса создания дистрибутива.
"C:Program Files (x86)kSignkSignCMD.exe" /f "[pfxfile]" /p [password] %1 %2 %3 %4 %5 pause
Сейчас откройте ваш проект в CreateInstall и перейдите к закладке Проект – страница Setup Builder. В поле Application for Code Signing укажите полный путь к созданному нами .bat файлу. Он будет запускаться когда потребуется подписать приложение.
Далее укажите параметры для подписывания дистрибутива, деинсталлятора и программы проверки обновлений. Первым параметром должно быть определено общее наименование программы, а вторым , который будет автоматически заменен на полный путь к подписываемому приложению. Например, значения могут быть следующими:
Parameters for Signing of Installation File: Setup "<exefilename>" Parameters for Signing of Uninstaller File: Uninstall "<exefilename>" Parameters for Signing of Updater File: Update "<exefilename>"
В данном случае, CreateInstall вызовет наш .bat файл для подписывания установки, деинсталлятора и программы обновления, если вы включаете ее в свой проект.
Как получить цифровую подпись
Цифровую подпись можно купить у специальных организаций. Например, Comodo, Verisign (Symantec). Сертификат можно приобрести как на один год, так и на несколько лет. Цены начинаются от $100-150 за один год, но через партнеров можно купить сертификат дешевле.
Например, KSoftware, являсь стратегическим партнером Comodo, продают сертификаты за $95 в год и есть скидки при его покупке на несколько лет. После того как вы произвели оплату, сотрудники соответствующей организации удостоверятся, что вы являетесь именно тем лицом или организацией на чье имя выдается цифровая подпись.
Когда все данные проверены, вам будет дана ссылка, по которой вы загрузите сертификат в Internet Explorer и затем вам нужно сохранить его в виде файла с расширением .pfx, также у вас должен быть пароль, который вы указывали при формировании заявки на сертификат.
Подписание файла windows exe
У меня есть EXE- файл, который я хочу подписать, чтобы Windows не предупредила конечного пользователя о приложении от «неизвестного издателя». Я не разработчик Windows. Рассматриваемое приложение является заставкой, созданной из приложения, которое генерирует приложения-заставки. Таким образом, я не имею никакого влияния на то, как создается файл.
Я уже узнал, что мне понадобится сертификат подписи кода от ЦС, такого как Verisign или instantmy-sertif.ru. Что я не понимаю, так это то, что мне нужно сделать (если это вообще возможно), чтобы подписать мой EXE-файл. Какое простое объяснение?
Ответ Мела Грина взял меня дальше, но signtool просит меня указать, какой сертификат использовать в любом случае. Могу ли я получить бесплатный сертификат подписи кода, чтобы проверить, будет ли это работать для меня вообще?
Также, пожалуйста, укажите, какой тип сертификата является правильным. Большинство сайтов упоминают только «подписывание кода» и говорят о подписи приложений, которые фактически скомпилированы пользователем. Это не тот случай для меня.
Проверить подпись
Используйте эту команду для проверки подписанного кода (обратите внимание, что /pa опция должна присутствовать в команде):
. signtool.exe verify / pa "C: path to MyExecutable.exe"
Если ваш файл был успешно подписан, вы должны увидеть следующий результат:
Файл: C: path to MyExecutable.exe Метка времени алгоритма индексации =================================== ===== 0 sha256 RFC3161 Успешно проверено: C: path to MyExecutable.exe
Вы также можете убедиться, что файл подписан, щелкнув его значок правой кнопкой мыши и выбрав Свойства из меню, затем выбрав Цифровые подписи таб. Чтобы просмотреть сведения о подписи, выберите ее и нажмите Подробнее кнопку.
Здесь мы видим, что файл содержит действующую цифровую подпись, созданную SSL Corp 28 июня 2020 года.
Укажите имя темы
Если у вас установлено более одного USB-токена или сертификата для подписи кода, вы можете указать сертификат вы хотите использовать, включая его Имя субъекта через /n опцию.
Вы можете найти имя субъекта вашего сертификата EV CS с помощью инструмента управления сертификатами Microsoft Certmgr. Откройте инструмент из меню «Пуск» и найдите свой сертификат EV CS в папке «Личные» в разделе «Сертификаты», как показано на изображении ниже. Имя субъекта – это поле «Кому выдано» в certmgr.
На изображении выше имя субъекта сертификата example, Вы можете указать это значение в SignTool с помощью следующей команды.
. signtool.exe sign / fd sha256 / n "пример" "C: path to MyExecutable.exe"
Укажите хэш sha1
Если у вас есть несколько сертификатов с одним и тем же именем субъекта, вы также можете использовать хэш SHA1 (или «отпечаток») сертификата, чтобы выбрать его для подписи. Заменить THUMBPRINT в приведенной ниже команде с фактическим хешем SHA1 вашего сертификата.
. signtool.exe sign / fd sha256 / sha1 THUMBPRINT "C: path to MyExecutable.exe"
Установить windows sdk и signtool
SignTool входит в комплект Пакет SDK для Windows 10, После установки SignTool будет находиться под:
C: Program Files (x86) Комплекты Windows 10 bin x64 signtool.exe

