Как подписать свое приложение для windows

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

Читайте также:  Как сменить заставку при загрузки windows

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

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

Источник

Создание сертификата для подписи пакета приложения

MakeCert.exe не рекомендуется. Текущие рекомендации по созданию сертификата см. в разделе «Создание сертификата» для подписывания пакета.

Узнайте, как использовать MakeCert.exe и Pvk2Pfx.exe для создания сертификата подписи тестового кода, чтобы подписать пакеты приложений Windows.

Перед развертыванием приложений необходимо подписать упакованные Windows приложения. Если вы не используете Microsoft Visual Studio 2012 для создания и подписывания пакетов приложений, необходимо создать собственные сертификаты подписи кода и управлять ими. Сертификаты можно создавать с помощью MakeCert.exe и Pvk2Pfx.exe из комплекта драйверов Windows (WDK). Затем можно использовать сертификаты для подписывания пакетов приложений, чтобы их можно было развернуть локально для тестирования.

Это важно знать

Технологии

Предварительные требования

Инструкции

Шаг 1. Определение имени издателя пакета

Чтобы создать сертификат подписи с помощью пакета приложения, который вы хотите подписать, имя субъекта сертификата подписи должно соответствовать атрибуту Publisher элемента Identity в AppxManifest.xml для этого приложения. Например, предположим, что AppxManifest.xml содержит следующее:

Для параметра publisherName , указанного служебной программой MakeCert на следующем шаге, используйте команду CN=Contoso Software, O=Contoso Corporation, C=US.

Эта строка параметра указывается в кавычках и учитывает регистр и пробелы.

Строка атрибута Publisher, определенная для элемента Identity в AppxManifest.xml, должна совпадать со строкой, указанной с параметром MakeCert /n для имени субъекта сертификата. Скопируйте и вставьте строку по возможности.

Шаг 2. Создание закрытого ключа с помощью MakeCert.exe

Используйте служебную программу MakeCert для создания самозаверяющего сертификата и закрытого ключа:

Эта команда выводит пароль для PVK-файла. Рекомендуется выбрать надежный пароль и сохранить закрытый ключ в безопасном расположении.

Мы рекомендуем использовать предлагаемые параметры в предыдущем примере по следующим причинам:

/r

Создает самозаверяющий корневой сертификат. Это упрощает управление для тестового сертификата.

/h 0

Помечает базовое ограничение для сертификата как конечной сущности. Это предотвращает использование сертификата в качестве центра сертификации (ЦС), который может выдавать другие сертификаты.

/eku

Задает значения расширенного использования ключа (EKU) для сертификата.

Не помещать пробел между двумя значениями с разделителями-запятыми.

  • 1.3.6.1.5.5.7.3.3 указывает, что сертификат действителен для подписи кода. Всегда указывайте это значение, чтобы ограничить предполагаемое использование сертификата.
  • 1.3.6.1.4.1.311.10.3.13 указывает, что сертификат учитывает подписывание времени существования. Как правило, если сигнатура имеет метку времени, при условии, что сертификат был действителен в момент его метки времени, подпись остается действительной, даже если срок действия сертификата истекает. Этот EKU заставляет срок действия подписи истекать независимо от того, является ли подпись меткой времени.

/e

Задает дату окончания срока действия сертификата. Укажите значение параметра expirationDate в формате mm/dd/yy. Рекомендуется выбрать дату окончания срока действия только до тех пор, пока это необходимо для тестирования, как правило, меньше года. Эта дата окончания срока действия в сочетании с EKU подписывания времени существования может помочь ограничить окно, в котором сертификат может быть скомпрометирован и неправильно использован.

Читайте также:  Драйвера для сетевого адаптера для винды 7

Дополнительные сведения о других параметрах см. в разделе MakeCert.

Шаг 3. Создание файла Exchange персональных данных (PFX) с помощью Pvk2Pfx.exe

Используйте служебную программу Pvk2Pfx для преобразования PVK-файлов и CER-файлов, созданных MakeCert , в PFX-файл, который можно использовать с SignTool для подписывания пакета приложения:

Файлы MyKey.pvk и MyKey.cer являются теми же файлами, которыеMakeCert.exe созданы на предыдущем шаге. С помощью необязательного параметра /po можно указать другой пароль для результирующего PFX-файла; в противном случае PFX-файл имеет тот же пароль, что и MyKey.pvk.

Дополнительные сведения о других параметрах см. в разделе Pvk2Pfx.

Remarks

После создания PFX-файла можно использовать файл с signTool для подписывания пакета приложения. Дополнительные сведения см. в разделе «Как подписать пакет приложения с помощью SignTool». Но сертификат по-прежнему не доверяется локальному компьютеру для развертывания пакетов приложений, пока он не будет установлен в хранилище доверенных сертификатов локального компьютера. Вы можете использовать Certutil.exe, которая поставляется с Windows.

Установка сертификатов с помощью WindowsCertutil.exe

Запустите Cmd.exe от имени администратора.

Выполните следующую команду:

Рекомендуется удалить сертификаты, если они больше не используются. В той же командной строке администратора выполните следующую команду:

CertID — это серийный номер сертификата. Выполните следующую команду, чтобы определить серийный номер сертификата:

Вопросы безопасности

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

Связанные темы

Примеры

Основные понятия

How to sign an app package using SignTool (Подписывание пакета приложения с помощью SignTool)

Источник

Создание сертификата для подписания пакета

В этой статье объясняется, как создать и экспортировать сертификат для подписывания пакета приложений с помощью инструментов PowerShell. рекомендуется использовать Visual Studio для упаковки приложений UWP и упаковки настольных приложений, но вы по-прежнему можете упаковать приложение вручную, если вы не использовали Visual Studio для разработки приложения.

Предварительные требования

Упакованное или распакованное приложение
Приложение, содержащее файл AppxManifest.xml. При создании сертификата, который будет использоваться для подписывания окончательного пакета приложений, потребуется сослаться на этот файл манифеста. Сведения о том, как вручную упаковать приложение, см. в разделе Создание пакета приложений с помощью инструмента MakeAppx.exe.

Командлеты инфраструктуры открытых ключей (PKI)
Вам потребуются командлеты PKI для создания и экспорта сертификата для подписи. Дополнительные сведения см. в разделе Командлеты инфраструктуры открытых ключей.

Создание самозаверяющего сертификата.

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

Читайте также:  Samdrivers как обновить драйвера

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

Определение субъекта вашего упакованного приложения

Чтобы использовать сертификат для подписывания пакета приложений, значение в поле сертификата «Субъект» должно совпадать с данными в разделе «Издатель» манифеста вашего приложения.

Например, раздел «Идентификатор» файла AppxManifest.xml вашего приложения должен выглядеть примерно следующим образом:

«Издатель» в данном случае — «CN=Contoso Software, O=Contoso Corporation, C=US», и именно его следует использовать для создания сертификата.

Использование командлета New-SelfSignedCertificate для создания сертификата

Используйте командлет PowerShell New-SelfSignedCertificate для создания самозаверяющего сертификата. Командлет New-SelfSignedCertificate имеет несколько параметров для настройки, однако в этой статье мы сконцентрируемся на создании простого сертификата, который будет работать вместе с SignTool. Дополнительные примеры и варианты использования этого командлета см. в статье New-SelfSignedCertificate.

Основываясь на файле AppxManifest.xml из предыдущего примера, используйте следующий синтаксис для создания сертификата. В строке с повышенными привилегиями PowerShell:

Обратите внимание на следующие сведения о некоторых параметрах.

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

Текстекстенсион: этот параметр включает параметры для следующих расширений:

Расширенное использование ключа (EKU). это расширение указывает дополнительные цели, для которых может использоваться сертифицированный открытый ключ. Для самозаверяющего сертификата этот параметр должен включать строку расширения «2.5.29.37 = 1.3.6.1.5.5.7.3.3″, которая указывает, что сертификат должен использоваться для подписывания кода.

Основные ограничения. это расширение указывает, является ли сертификат центром сертификации (ЦС). Для самозаверяющего сертификата этот параметр должен включать строку расширения «2.5.29.19 = «, которая указывает на то, что сертификат является конечной сущностью (а не центром сертификации).

После выполнения этой команды сертификат будет добавлен в локальное хранилище сертификатов, как указано в параметре «-CertStoreLocation». Результат выполнения команды также будет выдавать отпечаток сертификата.

Сертификат можно просмотреть в окне PowerShell, выполнив следующие команды:

Это позволит отобразить все сертификаты в вашем локальном хранилище.

Экспорт сертификата

Чтобы экспортировать сертификат из локального хранилища в файл обмена личной информацией (PFX), используйте командлет Export-PfxCertificate.

При использовании командлета Export-PfxCertificate следует либо создать и использовать пароль, либо с помощью параметра «-ProtectTo» указать, какие пользователи или группы могут осуществлять доступ к файлу без пароля. Обратите внимание, что если вы не используете параметр «-Password» или «-ProtectTo», отобразится ошибка.

Использование пароля

Использование ProtectTo

После создания и экспорт сертификата вы готовы подписать пакет приложений с помощью SignTool. Следующий шаг в процессе упаковки вручную описан в разделе Подпись пакета приложения с использованием инструмента SignTool.

Вопросы безопасности

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

Источник

Adblock
detector