Как подписать приложение windows 10
Следующая команда описывает создание cer-файла Windows (т. Е. Сертификата от доверенного провайдера).
Проблема заключается в том, что при создании приложения в Visual Studio 2017 он разрешает только через package.windows10.appxmanifest файл pfx. при обновлении этой ссылки на командную строку он не создает файл pvk, поэтому необходимо добавить
Дополнительные параметры командной строки, такие как / sv SubjectKeyFile, которые будут создавать результирующий файл pvk.
Однако даже используя эту ссылку на командную строку:
В результате имплантации файла сертификата в Visual Studio возникает следующая ошибка:
Захожу по ссылке и ничего толком не объясняет, что происходит. Один человек предлагает создать временный, который работает, но это неспецифический тестовый сертификат, срок действия которого составляет всего год.
Есть ли лучший способ создать сценарий с помощью makecert? Как узнать, правильно ли создается сертификат? Дополнительная документация была бы полезна, но я не нашел ничего другого.
2 ответа
Ответ, предоставленный @nico, содержит правильные утверждения, но заставил меня понять, что проблема была больше, чем я первоначально описывал. Итак, я очистил заголовок вопроса и вопрос, чтобы дать лучший вопрос и последующий ответ.
Во-первых, нужно спросить себя, для чего они используют приложение? Будет ли приложение загружено в Microsoft Store или оно предназначено только для внутреннего использования.
В любом случае вы захотите отладить и разработать приложение. Отладка не требует установки сертификата, так что в этом смысле мы в безопасности.
Если вы используете приложение внутри своей организации или просто на своем локальном компьютере, вам понадобится доверенный сертификат.
Этот сертификат может существовать в нескольких различных сценариях.
- Вам нужен самозаверяющий сертификат или
- Вам нужен сертификат, выданный центром сертификации ЦС, то есть вашей организацией или предприятием?
Я рассмотрю оба сценария. В любом случае протокол makecert устарел Замечания по прекращению поддержки makecert
Сценарий 1. Если вам нужен самозаверяющий сертификат, выполните следующие действия
- Перейдите в powershell и используйте командлет New-SelfSignedCertificate pkiclient . что это будет делать, так это предоставить вам создание .cer и соответствующей комбинации закрытого ключа + открытого сертификата = .pfx, если вы создаете для сертификата + закрытого ключа . И у вас должен быть закрытый ключ, то есть .pfx, чтобы связать и упаковать ваше приложение с Visual Studio и установить его в локальный магазин приложений Windows (не путать с магазином Microsoft).
Вот ссылки для перехода *** Обязательно прочтите 1A перед созданием сертификата:
1А. *** Когда вы создаете New-SelfSignedCertificate, вы должны понимать, что сертификат должен быть создан очень специфическим образом. Это для самозаверяющего сертификата или сертификата, выданного ЦС.
В частности, сертификат должен обладать двумя свойствами.
А). Для расширения Basic Constraints должно быть установлено значение Subject Type = End Entity. Простыми словами это говорит о том, что . Когда этот сертификат выдается вам, вы не можете использовать этот сертификат в качестве дополнительного последующего центра сертификации с возможностью выдавать больше сертификатов. Другими словами . Это окончательный сертификат.
Б). Для расширения Enhanced Key Usage (EKU) установлено значение Code Signing. Это предотвращает использование сертификата не по назначению . Это гарантирует, что программное обеспечение было получено от издателя программного обеспечения, &&& Защищает программное обеспечение от изменений после публикации.
В реквизитах сертификата информация будет выглядеть так:
Подпись кода (1.3.6..1.5.5.7.3.3) 26
Ссылка выше в вашем случае используется для создания сертификата Windows для драйвера. Если вы хотите создать сертификат для своего пакета UWP, вы можете выполнить следующие шаги:
Шаг 1. Определите имя издателя пакета
Шаг 2. Создайте закрытый ключ с помощью MakeCert.exe
Шаг 3. Создайте файл обмена личной информацией (.pfx) с помощью Pvk2Pfx.exe
И вы также можете использовать приведенную ниже команду для непосредственного создания сертификата. Вам нужно только заменить параметр CN на свой параметр.
Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:
«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»
Это ещё и пропуск на корпоративный рынок.
При запуске неподписанной программы появляется такое окно:
А так выглядит окно когда программа подписана:
Раньше вы возможно не обращали внимания на эту ерунду, но многие обращают. Во многих компаниях (те что покрупнее и не очень) запуск неподписанных программ просто запрещён, защита от вирусов и прочего «добра». Так что неподписанной программой вы сходу закрываете себе этот рынок и пугаете обычных пользователей. И это при том что сертификат для подписи стоит всего $99 в год ( у Comodo Group Inc. ).
Один важный момент, прежде чем получать сертификат, очень желательно зарегистрировать вашу компанию или ИП в агенстве Dun & Bradstreet и получить DUNS номер. Этот номер очень уважается компаниями которые выдают сертификаты и при предъявлении этого номера, в абсолютном большинстве случаев, более никаких подтверждающих документов не спрашивают. Иначе придётся высылать сканы уставных документов, а иногда и каких-нибудь счетов на компанию, например за телефон. Для получения сертификата на ИП это один из главных шагов. Без этого в случае ИП может вообще ничего не получиться.
Сам процесс подписания программы/инсталлятора достаточно простой и легко автоматизируется, если надо могу описать и его.
Вот собственно и всё. Если вы работаете на рынке программного обеспечения для windows — сертификат это важная и необходимая вещь. Я надо признать и сам стал избегать неподписанных программ после этого.
Что такое цифровая подпись для программы
Подпись программы – это процесс добавления специального кода (электронной подписи) к исполняемым файлам и драйверам на этапе разработки.
Электронная подпись позволяет пользователям убедиться, что данная программа:
- подписана именно данным автором, и
- не была изменена или повреждена после подписания.
Электронная подпись для программы также может содержать информацию о версии или другие метаданные. По сути это цифровой аналог обычной рукописной подписи и печати.
Польза от подписания программ для пользователей состоит в том, что они знают, кем было опубликовано данное ПО, и что оно не было изменено. Для разработчиков же это выгодно тем, что их программам доверяют, и подделать их труднее.
Как правило, подписывается не сам исполняемый файл, а его хэш-сумма. Это позволяет уменьшить размер цифровой подписи.
- Создать подпись можно только с помощью закрытого ключа, известного только владельцу подписи.
- При любом изменении программы изменяется ее хэш-сумма, и подпись становится недействительной, о чем выдается соответствующее предупреждение.
Для чего используется
Электронная подпись используется в большинстве криптографических протоколов, применяется для распространения ПО, в финансовых транзакциях и других операциях, для которых важно уметь распознать случаи фальсификации.
Наиболее частое применение подписи программного кода – обеспечение безопасности при установке программы. Например, файлы обновлений операционных систем содержат подписи компании-разработчика, чтобы принимающая система могла убедиться в целостности файлов и в том, что они действительно созданы данным производителем, даже если обновления доставляются через третьи лица (скачиваются с сайта дистрибьютора или устанавливаются с дисков).
Как получать цифровую подпись для программы
Электронные подписи создаются с помощью алгоритма подписи с открытым ключом, например, RSA. В алгоритме с открытым ключом на самом деле используются два различных ключа: открытый и закрытый. Закрытый ключ знает только его владелец, а открытый ключ доступен всем. В технологии электронной подписи с помощью закрытого ключа генерируется подпись, а соответствующий ему открытый ключ используется для её проверки.
Чтобы получить электронную подпись, необходимо обратиться в специальный центр сертификации (или удостоверяющий центр). Центр сертификации выдаёт ключи (закрытый и открытый) и сертификат (собственно подпись).
С помощью закрытого ключа разработчик вычисляет хэш-сумму своего кода (в специальном ПО или через веб-сайт), прикрепляет хэш-сумму и сертификат к коду и компилирует его – получается подписанная программа.
- уникальный номер;
- дата начала и окончания срока действия;
- данные о владельце;
- уникальный ключ проверки сертификата (открытый);
- название используемой подписи или стандарты, которым она соответствуют;
- название центра сертификации.
- срок действия ключа;
- отсутствие ключа в списке отозванных;
- факт выдачи ключа авторизованным центром сертификации.
Помимо выдачи ключей и сертификатов, центр сертификации отзывает истёкшие или скомпрометированные сертификаты и ведёт соответствующие базы данных.
Существует также вариант, при котором разработчик внедряет в код свою собственную, личную подпись. Конечному пользователю в этом случае необходимо получить открытый ключ непосредственно у разработчика, чтобы выполнить проверку ПО при первом запуске.
Кроме программной реализации цифровой подписи, существует также её аппаратная реализация (например, с помощью смарт-карт, USB-токенов и т.п.).
Однако само по себе наличие цифровой подписи в программе не гарантирует, что последняя безопасна. Наличие подписи говорит о том, что программа была получена из данного источника и не была изменена после того, как была подписана. Доверять источнику программы или нет, решает сам пользователь.
Лицензирование программ
Лицензирование позволяет из написанной программы сделать продукт, пригодный для продажи. Как и с цифровой подписью, разработчик может попытаться создать собственные механизмы или подключиться к существующим системам. Как правило, такие системы позволяют оперативно запустить продажи на основе распространения дистрибутива и серийных номеров, а также обеспечивают защиту от копирования, взлома и модификации.
Следующая команда описывает создание cer файла Windows (т.е. Сертификата от надежного поставщика).
Проблема заключается в том, что при создании приложения в Visual Studio 2017 оно позволяет только через файл package.windows10.appxmanifest файл pfx. при обновлении ссылки на эту командную строку он не создает pvk файл, поэтому нужно добавить
дополнительные параметры командной строки, такие как /sv SubjectKeyFile, которые будут создавать результирующий файл pvk.
Однако даже используя эту ссылку командной строки:
В результате имплантации файла сертификата в Visual Studio возникает эта ошибка:
Я иду по ссылке и ничего не объясняет на самом деле, что происходит. Один человек комментирует, чтобы создать временный, который работает, но это неспецифический тестовый сертификат, который длится всего год.
Есть ли лучший способ создать скрипт с makecert? Как мне узнать, правильно ли в конечном итоге создается сертификат или нет? Дополнительная документация будет полезна, но я не нашел ничего другого.
ОТВЕТЫ
Ответ 1
Ответ, предоставленный @nico, имеет правильные утверждения, но заставил меня осознать, что в этом было нечто большее, чем я первоначально описывал. Поэтому я очистил заголовок вопроса и вопрос, чтобы обеспечить лучший вопрос и последующий ответ.
Во-первых, нужно спросить себя, для чего они используют приложение? Будет ли приложение загружено в Microsoft Store или предназначено только для внутреннего использования.
В любом случае вы захотите отладить и разработать приложение. Отладка не требует установки сертификата, поэтому в этом смысле мы в безопасности.
Если вы используете приложение для своей организации или просто на локальном компьютере, вам понадобится доверенный сертификат.
Этот сертификат может существовать в нескольких различных сценариях.
- Вам нужен самозаверяющий сертификат или
- Вам нужен выданный сертификат от центра сертификации CA, т.е. вашего предприятия или организации?
Я пойду по обоим сценариям. В любом случае протокол makecert устарел Заметки об устаревании makecert
Сценарий 1. Если вам нужен самозаверяющий сертификат, выполните следующие действия.
- Перейдите на powershell и используйте командлет New-SelfSignedCertificate pkiclient. что позволит вам создать комбинацию .cer и соответствующий закрытый ключ + открытый сертификат =.pfx, если вы создадите для сертификата + закрытый ключ. И вам нужно иметь закрытый ключ, т.е..pfx, чтобы связать и упаковать ваше приложение с Visual Studio и установить его в локальное хранилище приложений Windows (не путать с магазином Microsoft.)
Вот ссылки, по которым нужно следовать *** Прежде чем создавать сертификат, обязательно прочитайте 1А:
1А. *** Когда вы создаете New-SelfSignedCertificate, вы должны понимать, что сертификат должен быть создан очень специфическим способом. Это для самоподписанного или выданного СА сертификата.
В частности, сертификат должен обладать 2 свойствами
а). Должно быть расширение Basic Constraints, установленное в Subject Type = End Entity. Простыми словами это говорит о том, что. Когда этот сертификат выдается вам, вы не можете сделать так, чтобы сертификат был последующим центром сертификации с возможностью выдавать больше сертификатов. Другими словами. Это конец строки сертификата.
б). Значение расширения Enhanced Key Usage (EKU) установлено на подпись кода. Это предотвращает использование сертификата для каких-либо целей, кроме его предназначения. Что означает, что программное обеспечение было получено от издателя программного обеспечения && Защищает программное обеспечение от изменения после публикации.
В деталях сертификата информация будет выглядеть следующим образом:
Подпись кода (1.3.6..1.5.5.7.3.3) & lt; & lt; & lt; & lt; Это OID расширенного использования ключа для подписи кода 1.3.6. число
Эта информация была найдена очень случайно и не в каком-либо конкретном порядке текущей документации:
1В. Таким образом, в конечном итоге для использования командлета New-SelfSignedCertifcate через powershell нужно было выполнить команду следующим образом:
Приведенная выше команда соответствует обоим критериям сертификата для подписи кода (хотя вместо использования свойства -type можно было бы выбрать oid расширения использования ключа с соответствующим типом подписи кода, т.е. oid подписи кода = 1.3.6.1. 5.5.7.3.3)
Если вы запустите указанную выше команду в powershell, вы создадите 2 вещи, которые теперь можно экспортировать.
А) публичный сертификат B.) закрытый ключ + открытый сертификат, содержащийся в формате файла .pfx.
Теперь, когда у нас есть возможность экспортировать .pfx, вы можете создать пароль и экспортировать файл с закрытым ключом + сертификат .pfx.
- Используя команду, вы запустите командлет в powershell Export-PfxCertificate:
Вот документация Экспорт pfx:
- На этом этапе у вас есть ключ, который работает с Visual Studio, и теперь вы можете упаковать свое приложение и создать файл .appx или файл appxbundle, который можно будет развернуть в хранилище Windows на локальных машинах.
Подробные инструкции можно найти здесь:
Сценарий 2. Если вам нужен доверенный сертификат от центра сертификации вашей организации
Здесь вы должны иметь в виду, что приведенный выше раздел важен, но вам нужно будет оценить разницу между самозаверяющим сертификатом и доверенным корневым сертификатом CA и/или последующим CA.
Ну, вот один из способов понять это. Корневым сертификатом при его создании был сертификат SelfSigned. Тем не менее, он имеет возможность выдавать сертификаты другим для различных вещей. то есть авторизация на сервере или подпись кода. Подумайте, основные ограничения НЕОГРАНИЧЕННЫЕ. И он также может выдавать другие центры сертификации, которые могут выдавать сертификаты другим по ряду причин.
Это называется цепочкой сертификатов. Помните, что сертификат, который мы хотим для наших целей, является концом этой цепочки. Basic Constraints = LIMITED до 0 или false, что означает, что он должен быть подписан как End-endtity или Certificate Authroity = false. в другом слова, которые вы не можете выдать дальнейшие сертификаты по любой причине из этого сертификата, который был выпущен.
Так как это для приложения, которое просто необходимо установить и использовать. Это имеет смысл.
Итак, для следующего сегмента я собираюсь объяснить шаги для запроса сертификата у вашего центра сертификации через запрос сертификата. В мире Linux через openssl это называется .csr. В мире powershell это называется .req
Если вы правильно установите параметры. конечный результат - это файл, который может быть прочитан веб-сайтом проверки openssl или сертификатом со сменным расширением .req или .csr
Powershell может создавать это с помощью командлета CertReq
- .Вы просто используете эту команду вместе с передачей файла .inf, который создаст ваш запрос сертификата .req
certreq -new TestReqConfig.inf MyRequest.req
- Файл .inf будет содержать параметры для ключа и информацию о сертификате, как при создании сертификата new-selfsigned на основе приведенной выше информации.
INF файл будет выглядеть так:
Requesttype = PKCS10 позволяет работать с декодером openssl csr. и все остальное объясняется через эти сайты:
Декодер работает, открывая файл создания и получая промежуточную информацию
Я надеюсь, что эта информация поможет кому-то узнать о сертификатах и о том, как они используются при упаковке и создании приложений для магазина Windows.
Ответ 2
Вышеупомянутая ссылка в вашем случае используется для оформления сертификата Windows для драйвера. Если вы хотите сделать сертификат для своего пакета UWP, вы можете обратиться к следующим шагам:
Шаг 1: Определите имя издателя пакета
Шаг 2. Создайте закрытый ключ, используя MakeCert.exe.
Шаг 3. Создание файла обмена личной информацией (.pfx) с помощью Pvk2Pfx.exe.
И вы также можете использовать приведенную ниже команду для создания сертификата напрямую. Вам нужно только заменить параметр CN параметром.
Читайте также: