Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:
«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»
Это ещё и пропуск на корпоративный рынок.
При запуске неподписанной программы появляется такое окно:
А так выглядит окно когда программа подписана:
Один важный момент, прежде чем получать сертификат, очень желательно зарегистрировать вашу компанию или ИП в агенстве Dun «>Необходимые условия для подписывания
Как подписать документ в программе eParakstītājs
Установка меток времени
Настоятельно рекомендуется использовать метки времени при подписывании приложения с помощью сертификата. Это действие сохраняет подпись, обеспечивая принятие пакета приложений платформой развертывания приложения, даже если срок действия сертификата истек. Во время проверки пакета метка времени позволяет проверить подпись пакета с учетом времени подписывания. Такие пакеты будут приняты, даже если сертификат недействителен. Пакеты без меток времени будут проверяться с учетом текущего времени и, если сертификат недействителен, 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
Подписание пакета приложения с помощью SignTool
SignTool — это средство командной строки, используемое для цифровой подписи пакета приложения или пакета приложений с помощью сертификата. Сертификат может быть создан пользователем (для тестирования) или выдан компанией (для распространения). Подписывание пакета приложения дает пользователю средство проверки отсутствия изменений в данных приложения после его подписи, при этом также подтверждается подлинность пользователя или компании, подписавшего пакет. SignTool может подписать зашифрованные и незашифрованные пакеты приложения и пакеты приложений.
Если для разработки приложения использовали Visual Studio, рекомендуется применять мастер Visual Studio для создания и подписывания пакета приложения. дополнительные сведения см. в статьях упаковка приложения UWP с Visual Studio и упаковка классического приложения из исходного кода с помощью Visual Studio.
Дополнительные сведения о подписи кода и сертификатах в целом см. в разделе Знакомство с процессом подписания кода.
Предварительные требования
- Упакованное приложение
Подробнее о ручном создании пакета приложения, создания пакета приложения с помощью средства MakeAppx.exe. - Действительный сертификат подписи
Дополнительные сведения о создании или импорте действительного сертификата подписи см. в разделе Создание или импорт сертификата для подписания пакета. - SignTool.exe
В зависимости от пути установки пакета SDK SignTool может находиться в следующих расположениях на компьютере с Windows 10:
- x86: C:Program files (x86) Windows пакет sdk Kits10bin < версии >x86SignTool.exe
- x64: C:Program files (x86) Windows пакет sdk Kits10bin < версии >x64SignTool.exe
Применение 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 таков:
SignTool sign [options]
Сертификат, используемый для подписания приложения, должен быть либо PFX-файлом либо установлен в хранилище сертификатов.
Чтобы подписать пакет приложения с помощью сертификата из PFX-файла, примените следующий синтаксис:
SignTool sign /fd /a /f .pfx /p .appx
SignTool sign /fd /a /f .pfx /p .msix
Обратите внимание, что параметр /a позволяет SignTool автоматически выбрать наиболее подходящий сертификат.
Если ваш сертификат не является PFX-файлом, используйте следующий синтаксис:
SignTool sign /fd /n .appx
SignTool sign /fd /n .msix
Кроме того, вы можете указать хэш SHA1 нужного сертификата вместо , с помощью следующего синтаксиса:
SignTool sign /fd /sha1 .appx
SignTool sign /fd /sha1 .msix
Обратите внимание, что с некоторыми сертификатами пароль не используется. Если для вашего сертификата не требуется пароль, опустите параметр «/p » в примерах команд.
Подписав пакет приложения с помощью действительного сертификата, вы сможете отправить пакет в Store. Дополнительные рекомендации по загрузке и отправке приложений в Store см. в разделе Отправка приложений.
Источник: learn.microsoft.com
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]