Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:
«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»
Это ещё и пропуск на корпоративный рынок.
При запуске неподписанной программы появляется такое окно:
А так выглядит окно когда программа подписана:
Один важный момент, прежде чем получать сертификат, очень желательно зарегистрировать вашу компанию или ИП в агенстве Dun «>Необходимые условия для подписывания
Как украсть Цифровую Подпись и Сертификат Файла
Установка меток времени
Настоятельно рекомендуется использовать метки времени при подписывании приложения с помощью сертификата. Это действие сохраняет подпись, обеспечивая принятие пакета приложений платформой развертывания приложения, даже если срок действия сертификата истек. Во время проверки пакета метка времени позволяет проверить подпись пакета с учетом времени подписывания. Такие пакеты будут приняты, даже если сертификат недействителен. Пакеты без меток времени будут проверяться с учетом текущего времени и, если сертификат недействителен, Windows не примет такой пакет.
Ниже описаны разные сценарии подписывания приложения с использованием меток времени и без них.
Сертификат действительный | Приложение будет установлено. | Приложение будет установлено. |
Сертификат недействительный (срок действия истек) | Приложение не будет установлено. | Приложение будет установлено, так как подлинность сертификата была проверена при подписывании центром меток времени. |
Если приложение установлено на устройстве, оно будет выполняться даже после истечения срока действия сертификата независимо от того, были ли установлены метки.
Режим устройства
Windows 10 позволяет пользователям выбирать следующие режимы работы устройства в настройках приложения: «Приложения Microsoft Store», «Неопубликованные приложения» и «Режим разработчика».
Как подписать программу цифровой подписью
Приложения Microsoft Store — это самый безопасный режим, так как он разрешает установку приложений только из Microsoft Store. Приложения в Microsoft Store проходят процесс сертификации, гарантирующий, что приложения безопасны для использования.
Неопубликованные приложения и Режим разработчика — это менее строгие режимы использования приложений, которые были подписаны с помощью других сертификатов, которые являются доверенными и которые связаны с одним из доверенных корневых сертификатов на устройстве. Выбирайте режим разработчика, только если вы являетесь разработчиком, который создает или отлаживает приложения для Windows 10. См. подробнее о режиме разработчика.
Подписание пакета приложения с помощью SignTool
SignTool — это средство командной строки, используемое для цифровой подписи пакета приложения или пакета приложений с помощью сертификата. Сертификат может быть создан пользователем (для тестирования) или выдан компанией (для распространения). Подписывание пакета приложения дает пользователю средство проверки отсутствия изменений в данных приложения после его подписи, при этом также подтверждается подлинность пользователя или компании, подписавшего пакет. SignTool может подписать зашифрованные и незашифрованные пакеты приложения и пакеты приложений.
Если для разработки приложения использовали Visual Studio, рекомендуется применять мастер Visual Studio для создания и подписывания пакета приложения. дополнительные сведения см. в статьях упаковка приложения UWP с Visual Studio и упаковка классического приложения из исходного кода с помощью Visual Studio.
Дополнительные сведения о подписи кода и сертификатах в целом см. в разделе Знакомство с процессом подписания кода.
Предварительные условия
Упакованное приложение
Подробнее о ручном создании пакета приложения, создания пакета приложения с помощью средства MakeAppx.exe.
Действительный сертификат подписи
Дополнительные сведения о создании или импорте действительного сертификата подписи см. в разделе Создание или импорт сертификата для подписания пакета.
SignTool.exe
В зависимости от пути установки пакета SDK SignTool может находиться в следующих расположениях на компьютере с Windows 10:
Применение SignTool
SignTool может использоваться для подписывания файлов, проверки подписей и меток времени, удаления подписей и другого. Так как нас интересует подписывание пакета приложения, мы рассмотрим команду sign. Подробные сведения об инструменте SignTool см. на справочной странице SignTool.
Определение хэш-алгоритма
При использовании SignTool для подписи пакета приложения или пакета приложений, хэш-алгоритм, применяемый в SignTool, должен совпадать с алгоритмом, использованном для упаковки приложения. Например, если вы применили MakeAppx.exe для создания пакета приложения с параметрами по умолчанию, то необходимо выбрать SHA256 в SignTool, поскольку это алгоритм, по умолчанию используемый в MakeAppx.exe.
Чтобы узнать, какой алгоритм хэширования применялся при упаковке приложения, извлеките содержимое пакета и изучите файл AppxBlockMap.xml. Инструкции по распаковке/извлечению пакета приложения см. в разделе Извлечение файлов из пакета приложения или пакета приложений. Хэш-метод указан в элементе BlockMap и имеет следующий формат:
В этой таблице показан каждое значение HashMethod и соответствующий хэш-алгоритм:
http://www.w3.org/2001/04/xmlenc#sha256 | SHA256 |
http://www.w3.org/2001/04/xmldsig-more#sha384 | SHA384 |
http://www.w3.org/2001/04/xmlenc#sha512 | SHA512 |
Так как в SignTool по умолчанию применяется алгоритм SHA1 (которого нет в MakeAppx.exe), вам всегда необходимо указывать хэш-алгоритм при использовании SignTool.
Подпись пакета приложения
Если у вас есть все необходимые компоненты и вы определили, какой хэш-алгоритм применялся для упаковки приложения, то вы готовы подписать его.
Общий синтаксис командной строки при подписи пакета с помощью SignTool таков:
Сертификат, используемый для подписания приложения, должен быть либо PFX-файлом либо установлен в хранилище сертификатов.
Чтобы подписать пакет приложения с помощью сертификата из PFX-файла, примените следующий синтаксис:
Обратите внимание, что параметр /a позволяет SignTool автоматически выбрать наиболее подходящий сертификат.
Если ваш сертификат не является PFX-файлом, используйте следующий синтаксис:
Обратите внимание, что с некоторыми сертификатами пароль не используется. Если для вашего сертификата не требуется пароль, опустите параметр «/p » в примерах команд.
Подписав пакет приложения с помощью действительного сертификата, вы сможете отправить пакет в Store. Дополнительные рекомендации по загрузке и отправке приложений в Store см. в разделе Отправка приложений.
Необязательный: создание сертификата подписи кода для Защитник Windows управления приложениями
Относится к:
Некоторые возможности управления приложениями в Защитнике Windows доступны только в определенных версиях для Windows. Дополнительные дополнительные Защитник Windows доступности функции управления приложениями.
При развертывании Защитник Windows управления приложениями (WDAC) может потребоваться подписать файлы каталога или политики WDAC внутри страны. Для этого вам потребуется выданный сертификат подписи кода или внутренний центр сертификации. Если вы приобрели сертификат подписи кода, вы можете пропустить эту тему и следовать другим темам, перечисленным в руководстве по развертыванию Защитник Windows управления приложениями.
Если у вас есть внутренний центр сертификации, выполните следующие действия, чтобы создать сертификат подписи кода. Для сертификата подписи кода поддерживается только алгоритм RSA, а подписи должны быть заполнены по стандарту 1.5 PKCS. Алгоритм ECDSA не поддерживается.
Откройте оснастку консоли управления MMC ЦС и выберите ваш центр сертификации, выдающий сертификаты подписи.
Выполнив подключение, щелкните правой кнопкой мыши Шаблоны сертификатови выберите Управление, чтобы открыть консоль шаблонов сертификации.
Рис. 1. Управление шаблонами сертификатов
В области навигации щелкните правой кнопкой мыши «Сертификат подписи кода» и выберите Скопировать шаблон.
На вкладке Общие укажите Отображаемое имя шаблона и Имя шаблона. В этом примере используется имя Сертификат подписи каталога WDAC.
На вкладке Обработка запроса установите флажок Разрешить экспортировать закрытый ключ.
На вкладке Расширения установите флажок Основные ограничения и щелкните Изменить.
В диалоговом окне Расширение «Изменение основных ограничений» установите флажок Включить это расширение, как показано на рисунке 2.
Рис. 2. Выберите ограничения для нового шаблона
Если для утверждения выданных сертификатов требуется диспетчер сертификатов, установите флажок Одобрения диспетчера сертификатов ЦС на вкладке Требования выдачи.
На вкладке Имя субъекта выберите Предоставляется в запросе.
На вкладке Безопасность убедитесь, что все учетные записи, которые будут использоваться для запроса сертификата, имеют право на регистрацию сертификата.
После создания шаблона сертификата необходимо опубликовать его в хранилище опубликованных шаблонов центра сертификации. Для этого необходимо выполнить описанные ниже действия.
В оснастке MMC центра сертификации щелкните правой кнопкой мыши Шаблоны сертификации, наведите указатель на пункт Создать, а затем нажмите Выдаваемый шаблон сертификата, как показано на рисунке 3.
Рис. 3. Выбор нового выдаваемого шаблона сертификата
Появится список доступных выдаваемых шаблонов, включая только что созданный шаблон.
Выберите сертификат подписи каталога WDAC и нажмите кнопку ОК.
Теперь, когда шаблон доступен для выпуска, необходимо запросить его на компьютере с Windows 10 и Windows 11, на котором создаются и подписываются файлы каталога. Откройте консоль MMC и выполните описанные ниже действия.
На консоли управления (MMC) в меню Файл щелкните Добавить или удалить оснастку. Дважды щелкните Сертификатыи выберите Моя учетная запись пользователя.
В оснастке сертификатов щелкните правой кнопкой мыши папку «Личное хранилище», наведите указатель на пункт Все задачии выберите Запросить новый сертификат.
В списке Запросить сертификат выберите только что созданный сертификат подписи, а затем щелкните голубую надпись, предлагающую ознакомиться с дополнительными сведениями (см. рис. 4).
Рис. 4. Получение дополнительных сведений о сертификате подписи кода
В диалоговом окне Свойства сертификата для параметра Типвыберите значение Общее имя. Для параметра Значениеукажите ContosoDGSigningCert, а затем щелкните Добавить. Добавив элемент, нажмите кнопку ОК
В завершение выполните регистрацию.
Если руководителю сертификата требуется утвердить все выданные сертификаты, а для этого требуется утверждение руководства по шаблону, запрос должен быть утвержден в ЦС, прежде чем он будет выдан клиенту.
Этот сертификат должен быть установлен в личном хранилище пользователя на компьютере, который будет подписывать файлы каталога и политики целостности кода. Если подписание будет выполняться на компьютере, с которого вы только что запросили сертификат, экспорт сертификата в PFX-файл не потребуется, поскольку такой файл уже существует в вашем личном хранилище. Если вы выполняете подписывание на другом компьютере, вам необходимо будет экспортировать сертификат PFX с необходимыми ключами и свойствами. Для этого необходимо выполнить описанные ниже действия.
Щелкните правой кнопкой мыши сертификат, наведите указатель на пункт Все задачии выберите Экспорт.
Щелкните Далее, а затем выберите Да, экспортировать закрытый ключ.
Выберите параметры по умолчанию, а затем выберите Экспортировать все расширенные свойства.
Если сертификат был экспортирован, импортируйте его в личное хранилище для пользователя, который будет подписывать файлы каталога или политики целостности кода, на конкретном компьютере, который их будет подписывать.
Источник: windorez.ru
Code Signing в Windows, просто и недорого
Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:
«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»
Это ещё и пропуск на корпоративный рынок.
При запуске неподписанной программы появляется такое окно:
А так выглядит окно когда программа подписана:
Раньше вы возможно не обращали внимания на эту ерунду, но многие обращают. Во многих компаниях (те что покрупнее и не очень) запуск неподписанных программ просто запрещён, защита от вирусов и прочего «добра». Так что неподписанной программой вы сходу закрываете себе этот рынок и пугаете обычных пользователей. И это при том что сертификат для подписи стоит всего $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 https://habr.com/ru/articles/83008/» target=»_blank»]habr.com[/mask_link]
Подписываем драйвер в Windows 7
Перед началом инструкций отметим, что иногда бывает проще отключить проверку цифровых подписей в операционной системе, нежели вручную подписывать драйвер. К тому же есть и альтернативные варианты инсталляции неподписанного ПО, о чем более детально читайте в других руководствах на нашем сайте, воспользовавшись ссылками ниже.
Подробнее:
Отключение проверки цифровой подписи драйверов в Windows 7
Установка драйвера без проверки цифровой подписи в Windows
Способ 1: Импорт цифровой подписи
Первый вариант подходит тем пользователям, кто собирается устанавливать его в операционную систему только один раз и не заинтересован в дальнейшем распространении. Этот способ лучше всего использовать в тех ситуациях, когда вы скачали драйвер, но оказалось, что он не подписан и инсталлировать его не получается. Тогда от вас требуется перенести его конфигурацию в Windows 7, что осуществляется так:
- Перейдите в папку с драйвером и отыщите там файл формата INF, который и должен быть установлен в ОС. Щелкните по нему ПКМ, чтобы вызвать контекстное меню.
- Внизу списка выберите пункт «Свойства».




Теперь драйвер считается зарегистрированным. Если инсталляция остальных компонентов должна происходить при помощи исполняемого файла, перейдите в каталог с программным обеспечением и запустите его, чтобы завершить установку.
Способ 2: Ручное создание подписи
Этот способ более сложный, поэтому пришлось даже разделить его на этапы во избежание проблем с пониманием. Его суть заключается в использовании фирменных средств разработчика от Microsoft, чтобы создать подпись для пользовательского драйвера. Особое внимание этому методу стоит уделить тем, кто заинтересован в ручной разработке драйверов.
Шаг 1: Предварительные действия
Компания Майкрософт распространяет все необходимые утилиты в свободном доступе, однако по умолчанию они отсутствуют в Windows 7, поэтому сначала придется заняться их загрузкой и инсталляцией.
- Откройте ссылку выше, чтобы открыть страницу скачивания Microsoft Windows SDK, где нажмите по кнопке «Download».
- Загрузка инсталлятора начнется в автоматическом режиме: ожидайте ее окончания, а затем запустите исполняемый файл.
- При появлении окна контроля учетных записей разрешите внесение изменений.
- Следуйте отобразившейся на экране инструкции и переходите далее.
- По ссылке, ведущей на страницу приложения, загрузите Windows Driver Kit. Перейти на официальный сайт Microsoft для скачивания Windows Driver Kit 7.1.0
- Это целый пакет разных утилит и дополнительных компонентов, распространяющийся в виде ISO-образа. По завершении загрузки вам необходимо смонтировать его через любую удобную программу, о чем читайте по ссылке далее. Подробнее: Как смонтировать образ в программе DAEMON Tools
- После запуска диска через виртуальный привод откройте EXE-файл для начала инсталляции.
- Укажите версию операционной системы.
- Выберите для установки все присутствующие инструменты, отметив их галочками, и завершите операцию.
- Затем откройте корень системного логического тома жесткого диска, где создайте папку с названием «DriverCert». В нее будут помещены все зависящие от драйвера объекты для удобства взаимодействия с ними.
- Переходите по стандартным расположениям установленных компонентов, чтобы запомнить путь ко всем каталогам. Вы можете скопировать их или записать, чтобы не запутаться при выполнении следующих действий.
Сейчас уже существуют новые версии рассмотренных инструментов, но вам нужно загружать только те сборки, на которые мы оставили ссылки. Связано это с тем, что разработчики в новых версиях прекратили поддержку используемых далее утилит, что не позволит вручную подписать драйвер. Убедитесь в том, что все компоненты установлены, перезагрузите компьютер и переходите далее.
Шаг 2: Генерация ключа и сертификата
Сертификат необходим драйверу для того, чтобы определить его подлинность, а сгенерированные ключи обезопасят сам файл от несанкционированного изменения. Создание таких компонентов — обязательное условие от Microsoft, поэтому каждому пользователю придется выполнить следующие действия:
Это был самый простой этап создания цифровой подписи для драйвера, в ходе которого практически никогда не возникает никаких ошибок. Однако если на экране отобразились какие-то предупреждающие уведомления, не игнорируйте их, читайте содержимое и исправляйте ситуацию в соответствии с находящимися там рекомендациями.
Шаг 3: Создание конфигурационного файла
Конфигурационный файл необходим каждому драйверу, ведь именно в нем и будут храниться основные сведения. В дальнейшем он может пригодиться, если, например, понадобится изменить дату последнего изменения или внести коррективы в название версии драйвера. Сначала понадобится обратиться в заранее созданную папку «DriverCert», куда перенесите файлы драйвера, для которого и создается подпись, выделив для них отдельный подкаталог. После запустите консоль и выполните такие действия:
- Для использования следующей утилиты снова придется переместиться в папку с набором инструментов от Майкрософт, а для этого задействуйте команду cd C:WinDDK7600.16385.1binselfsign .
- Предварительно откройте каталог с драйвером и убедитесь, что там есть два файла с расширениями INF и SYS, ведь они будут задействованы для следующего формирования конфигурационного файла. После введите inf2cat.exe /driver:»C:DriverCertDRIVER» /os:7_X64 /verbose , заменив DRIVER на название ранее созданной папки с файлами. Подтвердите выполнение команды нажатием на Enter.
Следите за состоянием «Командной строки» и ожидайте появления на экране уведомлений «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: Создание подписи для драйвера
Когда все предыдущие этапы завершены, остается только подписать сам драйвер, что выполняется при помощи добавленных ранее средств разработчика через уже привычную Командную строку.
- Откройте консоль от имени администратора и напишите команду cd «C:Program Files (x86)Windows Kits10bin10.0.17134.0×64» .
- Далее вставьте содержимое 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 уведомит об успешном завершении процесса.
- По очереди вставьте две команды ниже, устанавливающие сертификат. certmgr.exe -add C:DriverCertmyDrivers.cer -s -r localMachine ROOT
certmgr.exe -add C:DriverCertmyDrivers.cer -s -r localMachine TRUSTEDPUBLISHER
Следуйте отобразившимся в графическом меню инструкциям, чтобы завершить подпись. На этом процесс считается оконченным, а подписанный драйвер остается только вручную установить, если это требуется.
Источник: lumpics.ru