Как подписать программу сертификатом windows

Как подписать программу сертификатом windows

Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:
«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»
Это ещё и пропуск на корпоративный рынок.

image

При запуске неподписанной программы появляется такое окно:

image

А так выглядит окно когда программа подписана:

Раньше вы возможно не обращали внимания на эту ерунду, но многие обращают. Во многих компаниях (те что покрупнее и не очень) запуск неподписанных программ просто запрещён, защита от вирусов и прочего «добра». Так что неподписанной программой вы сходу закрываете себе этот рынок и пугаете обычных пользователей. И это при том что сертификат для подписи стоит всего $99 в год ( у Comodo Group Inc. ).

Правда тут может быть одна проблема, сертификат выдаётся на компанию, в некоторых случаях получается получить сертификат на ИП с dba(doing business as) именем вместо имени и фамилии. На частное лицо получить сертификат не получится. Ещё некоторое время назад, хитрецы владеющие фотошопом могли получить сертификат «нарисовав» документы. Но потом ребята из сообщества Mozilla купили себе сертификат в Comodo без каких либо проверок вообще и рассказали об этом в сети. С тех пор в Comodo требуют уставные документы компании.
Другие trusted certificate authority тоже предлагают подобные услуги, но они дороже. Даже на сайте самого Comodo сертификаты по $166.95 в год, Thawte $299 в год, Verisign $499 в год. Если же вам надо подписать драйвер, то Verisign без вариантов, хотя на первый год можно получить скидку в $400 и заплатить всего $99 ( надо использовать этот промо код: THEDEAL99 ). Также без сертификата Verisign не получить Designed for Windows… Во всех остальных случаях нет никакого смысла переплачивать за имя компании выдавшей сертификат. Сертификат за $99 наилучший вариант на данный момент, только покупать его надо через реселлера, например: ksoftware.net, я покупаю сертификаты через них уже не первый год.

Один важный момент, прежде чем получать сертификат, очень желательно зарегистрировать вашу компанию или ИП в агенстве Dun & Bradstreet и получить DUNS номер. Этот номер очень уважается компаниями которые выдают сертификаты и при предъявлении этого номера, в абсолютном большинстве случаев, более никаких подтверждающих документов не спрашивают. Иначе придётся высылать сканы уставных документов, а иногда и каких-нибудь счетов на компанию, например за телефон. Для получения сертификата на ИП это один из главных шагов. Без этого в случае ИП может вообще ничего не получиться.

Сам процесс подписания программы/инсталлятора достаточно простой и легко автоматизируется, если надо могу описать и его.

Вот собственно и всё. Если вы работаете на рынке программного обеспечения для windows — сертификат это важная и необходимая вещь. Я надо признать и сам стал избегать неподписанных программ после этого.

Как подписать драйвер Windows 10, 8.1 и Windows 7 x64 и x86

Как самостоятельно подписать драйвер Windows

Windows 10, 8.1 и Windows 7 позволяют отключить обязательную проверку цифровой подписи драйверов и установить неподписанный драйвер, однако если в последних версиях ОС это нужно сделать на постоянной основе, изменение опций с помощью bcdedit не помогает. Однако, может помочь самостоятельная подпись драйвера и его последующая установка, о чем и поговорим.

В этой инструкции подробно о том, как самостоятельно подписать драйвер для Windows 10, 8.1 или Windows 7 x64 или 32-бит (x86) для последующей установки в системе на постоянной основе без отключения проверки цифровой подписи драйверов, избежав при этом ошибок наподобие «INF стороннего производителя не содержит информации о подписи».

Что потребуется для подписи драйвера

Для того, чтобы выполнить все описанные далее шаги, скачайте и установите следующие инструменты с сайта Майкрософт:

  • Microsoft Windows SDK for Windows 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279
  • Windows Driver Kit 7.1.0 https://www.microsoft.com/en-us/download/details.aspx?id=11800

Из первого набора достаточно будет установить Tools, из второго (представляет собой ISO-образ с установщиком, с которого нужно запустить KitSetup.exe) — выбрать Build Environments и Tools.

Обратите внимание: это не последние версии наборов инструментов, но они в равной степени подойдут для самостоятельной подписи драйверов для последующей установки во всех ОС от Windows 10 до Windows 7, при этом в инструкции не потребуется вдаваться в некоторые дополнительные нюансы.

Процесс самостоятельной подписи драйвера

В процессе для того, чтобы подписать драйвер самостоятельно, нам потребуется: создать сертификат, подписать драйвер этим сертификатом, установить сертификат в системе и установить драйвер. Начнем.

  1. Создайте в корне диска C какую-либо папку (так к ней проще будет обращаться в дальнейшем), например, C:cert, где мы будем работать с сертификатами и драйверами.
  2. Запустите командную строку от имени администратора (нужны для 18-го шага). Далее используем следующие команды по порядку. Файлы драйвера пока не потребуются. Во время выполнения второй команды вас попросят ввести пароль, я использую password в окне запроса и далее в командах, вы можете использовать свой.
  3. До этого этапа всё должно пройти как на скриншоте ниже, командную строку не закрываем. Создание файла сертификата для подписи драйвера
  4. В папке C:cert создайте вложенную папку, например, drv и поместите туда свои файлы драйвера. Но: если вам требуется драйвер только для x64, не копируйте .inf файл для x86 систем в эту папку и наоборот. файлы драйвера для подписыванияВ командной строке используем следующие команды:
  5. В предыдущей команде для драйвера 32-бит укажите X86 вместо X64. Если будет предложено скачать .NET Framework, согласитесь, установите, а затем заново выполните команду. В идеале вы должны будете получить сообщение об успешном создании .cat файла для подписи. Однако, возможны ошибки, о наиболее частых — следующие два пункта. После исправления ошибок повторите команду из пункта 10.
  6. DriverVer set to incorrect date — возникает при дате в файле драйвера до 21 апреля 2009 года. Решение: откройте файл .inf из папки drv в текстовом редакторе (можно в блокноте) и в строке DriverVer установите другую дату (формат: месяц/день/год).
  7. Missing AMD64 CatalogFile entry (для 64-бит) или Missing 32-bit CatalogFile entry. Решение: откройте файл .inf из папки drv в текстовом редакторе и в разделе [Version] добавьте строку CatalogFile=catalog.cat
  8. В итоге вы должны получить сообщение: Catalog generation complete с указанием пути к файлу каталога, в моем случае – C:certdrvcatalog.cat. Далее используем следующие команды (требуется подключение к Интернету). Файл каталога создан успешно
  9. Результат подписи файла драйвера без ошибок на скриншоте ниже. Следующий шаг — добавить самоподписанный сертификат в список доверенных в системе, сделать это можно следующими двумя командами по порядку Подписать драйвер с помощью signtool
  10. В результате вы должны получить сообщение «CertMgr Succeeded». Если Failed или certmgr.exe не является внутренней или внешней командой — убедитесь, что командная строка запущена от имени администратора, а вы находитесь в нужной папке (см. 15 шаг).

И вот теперь можно закрыть командную строку и установить драйвер из папки C:certdrv с помощью диспетчера устройств, или нажав правой кнопкой по .inf файлу и выбрав пункт «Установить». Потребуется подтвердить установку драйвера в окне «Не удалось проверить издателя этих драйверов» — нажать «Все равно установить этот драйвер».

Установка самостоятельно подписанного драйвера

Обратите внимание, что возможные ошибки в диспетчере устройств, отображаемые для устройства с самостоятельно подписанным драйвером обычно не имеют отношения непосредственно к процессу подписи (та же ошибка для них будет появляться и без подписи, при простом отключении проверки цифровой подписи драйверов в особых вариантах загрузки). Т.е. искать причину в этом случае нужно в чем-то ещё и читать подробную инструкцию по использованию драйвера (например, в случае драйверов для FlashTool).

Подписываем драйвер в Windows 7

Как подписать драйвер в Windows 7

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

Подробнее:
Отключение проверки цифровой подписи драйверов в Windows 7
Установка драйвера без проверки цифровой подписи в Windows

Способ 1: Импорт цифровой подписи

Первый вариант подходит тем пользователям, кто собирается устанавливать его в операционную систему только один раз и не заинтересован в дальнейшем распространении. Этот способ лучше всего использовать в тех ситуациях, когда вы скачали драйвер, но оказалось, что он не подписан и инсталлировать его не получается. Тогда от вас требуется перенести его конфигурацию в Windows 7, что осуществляется так:

  1. Перейдите в папку с драйвером и отыщите там файл формата INF, который и должен быть установлен в ОС. Щелкните по нему ПКМ, чтобы вызвать контекстное меню. Выбор драйвера для копирования цифровой подписи в Windows 7
  2. Внизу списка выберите пункт «Свойства». Переход к свойствам драйвера перед копированием цифровой подписи в Windows 7

Теперь драйвер считается зарегистрированным. Если инсталляция остальных компонентов должна происходить при помощи исполняемого файла, перейдите в каталог с программным обеспечением и запустите его, чтобы завершить установку.

Способ 2: Ручное создание подписи

Этот способ более сложный, поэтому пришлось даже разделить его на этапы во избежание проблем с пониманием. Его суть заключается в использовании фирменных средств разработчика от Microsoft, чтобы создать подпись для пользовательского драйвера. Особое внимание этому методу стоит уделить тем, кто заинтересован в ручной разработке драйверов.

Шаг 1: Предварительные действия

Компания Майкрософт распространяет все необходимые утилиты в свободном доступе, однако по умолчанию они отсутствуют в Windows 7, поэтому сначала придется заняться их загрузкой и инсталляцией.

Lumpics.ru

  1. Откройте ссылку выше, чтобы открыть страницу скачивания Microsoft Windows SDK, где нажмите по кнопке «Download». Скачивание компонента разработчика для цифровой подписи драйвера в Windows 7
  2. Загрузка инсталлятора начнется в автоматическом режиме: ожидайте ее окончания, а затем запустите исполняемый файл. Запуск установщика компонента разработчики для цифровой подписи драйвера Windows 7
  3. При появлении окна контроля учетных записей разрешите внесение изменений. Подтверждение запуска установщика компонента разработчика для цифровой подписи драйвера Windows 7
  4. Следуйте отобразившейся на экране инструкции и переходите далее. Установка компонента разработчика для цифровой подписи драйвера Windows 7
  5. По ссылке, ведущей на страницу приложения, загрузите Windows Driver Kit.

Шаг 2: Генерация ключа и сертификата

Сертификат необходим драйверу для того, чтобы определить его подлинность, а сгенерированные ключи обезопасят сам файл от несанкционированного изменения. Создание таких компонентов — обязательное условие от Microsoft, поэтому каждому пользователю придется выполнить следующие действия:

  1. Запустите «Командную строку» от имени администратора. Запуск командной строки для начала цифровой подписи драйвера Windows 7
  2. Введите команду cd C:Program Files (x86)Microsoft SDKsWindowsv7.1bin , чтобы перейти к папке с объектами SDK. Если вы изменяли директорию при установке, замените путь на актуальный. Активируйте команду нажатием по клавише Enter. Переход по пути хранения утилиты для создания закрытого и открытого ключа в Windows 7
  3. Задействуйте утилиту, входящую в состав SDK, чтобы сгенерировать сертификат, вписав в консоль команду makecert -r -sv C:DriverCertmyDrivers.pvk -n CN=»NameCompany» C:DriverCertMyDrivers.cer . Замените NameCompany на название изготовителя драйвера или впишите произвольное. Команда для создания закрытого ключа при создании цифровой подписи драйвера Windows 7
  4. На экране отобразится форма для создания пароля к закрытому ключу, а от вас требуется ввести его в соответствующем поле и подтвердить. Создание пароля для закрытого ключа перед цифровой подписью драйвера Windows 7
  5. Для продолжения работы в новом окне введите уже присвоенный пароль. Повторный ввод закрытого ключа для перехода к созданию цифровой подписи драйвера в Windows 7
  6. После автоматического закрытия окна ознакомьтесь с содержимым консоли: если в конце вы видите уведомление «Succeeded», значит, генерация прошла удачно и можно двигаться далее. Успешное создание ключа и сертификата для цифровой подписи в Windows 7
  7. Следующий обязательный этап заключается в создании публичного ключа, и он будет доступен всем желающим внедрить драйвер в программное обеспечение. Для этого вставьте команду cert2spc C:DriverCertmyDrivers.cer C:DriverCertmyDrivers.spc . Команда для создания публичного ключа перед цифровой подписью драйвера в Windows 7
  8. Сообщение в консоли должно свидетельствовать об успешном создании публичного ключа. Успешное создание открытого ключа перед цифровой подписью драйвера в Windows 7
  9. Закрытый и публичный ключ должны быть объединены в один компонент, а для этого используется команда pvk2pfx -pvk C:DriverCertmyDrivers.pvk -pi P@ss0wrd -spc C:DriverCertmyDrivers.spc -pfx C:DriverCertmyDrivers.pfx -po PASSWORD . Замените PASSWORD на ранее созданный пароль закрытого ключа. Команда для объединения закрытого и открытого ключа при создании цифровой подписи драйвера Windows 7

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

Шаг 3: Создание конфигурационного файла

Конфигурационный файл необходим каждому драйверу, ведь именно в нем и будут храниться основные сведения. В дальнейшем он может пригодиться, если, например, понадобится изменить дату последнего изменения или внести коррективы в название версии драйвера. Сначала понадобится обратиться в заранее созданную папку «DriverCert», куда перенесите файлы драйвера, для которого и создается подпись, выделив для них отдельный подкаталог. После запустите консоль и выполните такие действия:

  1. Для использования следующей утилиты снова придется переместиться в папку с набором инструментов от Майкрософт, а для этого задействуйте команду cd C:WinDDK7600.16385.1binselfsign . Переход к утилите для создания конфигурационного файла перед цифровой подписью драйвера Windows 7
  2. Предварительно откройте каталог с драйвером и убедитесь, что там есть два файла с расширениями INF и SYS, ведь они будут задействованы для следующего формирования конфигурационного файла. После введите inf2cat.exe /driver:»C:DriverCertDRIVER» /os:7_X64 /verbose , заменив DRIVER на название ранее созданной папки с файлами. Подтвердите выполнение команды нажатием на Enter. Ввод команды для создания конфигурационного ключа перед цифровой подписью драйвера Windows 7

Следите за состоянием «Командной строки» и ожидайте появления на экране уведомлений «Signability test complete» и «Catalog generation complete». Во время процедуры создания файла настоятельно не рекомендуется выполнять других действий на компьютере, поскольку это может вызвать сбои в функционировании утилиты.

Отдельно отметим самую частую ошибку, которая появляется при создании конфигурационного файла. Ее текст выглядит примерно так: «22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in XXXXX.inf», а вызывает ее некорректно установленная дата создания объекта. Если такая проблема возникла, откройте целевой файл, имя которого и указано в ошибке, через стандартный «Блокнот», где отыщите строку «DriverVer=» и поменяйте ее значение на 05/01/2009,9.9.9.9 . Сохраните изменения и повторно выполните создание конфигурационного файла.

Шаг 4: Создание подписи для драйвера

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

  1. Откройте консоль от имени администратора и напишите команду cd «C:Program Files (x86)Windows Kits10bin10.0.17134.0×64» . Переход по пути расположения инструментов для создания цифровой подписи драйвера Windows 7
  2. Далее вставьте содержимое signtool sign /f C:DriverCertmyDrivers.pfx /p PASSWORD /t http://timestamp.globalsign.com/scripts/timstamp.dll /v «C:DriverCertxgxg20gr.cat» , заменив PASSWORD на пароль закрытого ключа, который создавался ранее. Во время данной операции будет задействован онлайн-сервис Globalsign, отвечающий за установку штампа времени, поэтому убедитесь в наличии подключения к интернету. Появившаяся в консоли строка Successfully signed: C:DriverCertxgxg20gr.cat Number of files successfully Signed: 1 уведомит об успешном завершении процесса. Команда для установки штампа времени перед подписью драйвера Windows 7
  3. По очереди вставьте две команды ниже, устанавливающие сертификат.

Cert: Создание самоподписанного сертификата для подписи кода в Windows 2008

1) Для создания сертификата моего личного корневого центра сертификации у меня на 2008R2 работал следующий код: PS C:UsersАдминистратор> &»C:Program Files (x86)Microsoft.NETSDKv2.0Binmakecer t.exe» -r -pe -n «CN=mycompany.ru» -ss CA -sr CurrentUser -a sha1 -cy authority -sky signature -sv mycompany.pvk mycompany.crt

2) Потом мы содаём сертификат для подписания кода использую созданный ранее личный корневой центр: PS C:UsersАдминистратор> &»C:Program Files (x86)Microsoft.NETSDKv2.0Binmakecer t.exe» -pe -n «CN=mycompany_code_signing» -a sha1 -cy end -sky signature -ic «C:UsersАдминистраторDesktop mycompany.crt » -iv «C:UsersАдминистраторDesktop mycompany.pvk » -sv mycompany_code_signing .pvk mycompany_code_signing .cer

3) Импорт сертификатов в систему:
Наш новый корневой сертификат легко импортируется через GUI по двойному щелчку(*.crt) — нужно лишь указать что он идёт в раздел сертификатов корневых центров
Наш сертификат для подписи кода добавить солжнее т.к. его надо добавить с ключом. Контекст: Есть стандартный формат хранения и сертификата и ключа в одном файле и он называется *.pfx. Проблема в том что на предыдущих шагах мы сгенерировали и ключ и серт в отдельных файлах, а ключ так вообще в проприетарном формате Microsoft *.pvk. Есть два способа сделать дело:
1) Использовать pvk2pfx.exe который распространяется в лучших традициях майкрософта — хуй знает где. В .NET 2.0 SDK его нет, а вот в Windows Software Development Kit for Windows 8.1 он есть. Но этот SDK большой и ставится долго. Зато импорт идёт в GUI по щелчку мыши.
2) Использовать pvkimport.exe (который кстати умеет и экспортировать в pfx). Синтаксис прост, в качестве всего лишь указываются *.crt и *.pvk. 4) Добавить наш се ртификат для подписи кода в доверенные издатели всё в той же MMC, чтобы у PS было меньше вопросов.

5) Подписать код, есть два пути:
1) Графический, доступен только в устаревшей версии программы signtool из того же .NET 2.0 SDK. Её нужно запустить с ключом wizzard или что-то типа того.
2) Стандартный — signtool из комплекта Win 8.1 SDK не имеет мастера, но подписывает вот так: Хороший ответ по всей процедуре на стэковерфлоу:

While you can create a self-signed code-signing certificate (SPC — Software Publisher Certificate) in one go, I prefer to do the following:

Creating a self-signed certificate authority (CA)

(^ = allow batch command-line to wrap line) This creates a self-signed (-r) certificate, with an exportable private key (-pe). It’s named «My CA», and should be put in the CA store for the current user. We’re using the SHA-256 algorithm. The key is meant for signing (-sky). The private key should be stored in the MyCA.pvk file, and the certificate in the MyCA.cer file.

Importing the CA certificate

Because there’s no point in having a CA certificate if you don’t trust it, you’ll need to import it into the Windows certificate store. You can use the Certificates MMC snapin, but from the command line:

Creating a code-signing certificate (SPC)

It is pretty much the same as above, but we’re providing an issuer key and certificate (the -ic and -iv switches). We’ll also want to convert the certificate and key into a PFX file: If you want to protect the PFX file, add the -po switch, otherwise PVK2PFX creates a PFX file with no passphrase.

Using the certificate for signing code

Full Microsoft documentation

Downloads

For those who are not .NET developers, you will need a copy of the Windows SDK and .NET framework. A current link is available here: SDK & .NET (which installs makecert in C:Program FilesMicrosoft SDKsWindowsv7.1 ). Your mileage may vary.

Похожие публикации:

  1. Как пишется катридж или картридж правильно
  2. Как сделать планету в блендере
  3. Ноутбук асус как ставить драйвер нвидиа
  4. Что означает в ютубе ошибка сервиса 400

https://tvcent.ru/obuchenie/13/kak-podpisat-programmu-sertifikatom-windows

Похожие записи