Язык

ClickOnce и Authenticode

Authenticode — это технология Майкрософт, использующая стандартную криптографию для подписывания кода приложения цифровыми сертификатами, которые проверяют подлинность издателя приложения. Используя Authenticode для развертывания приложений, ClickOnce снижает риск троянца. Троянский конь — это вирус или другая вредная программа, которая злонамеренной стороной непреднамеренно выступает в качестве законной программы, исходящей из установленного, надежного источника. Подписывание развертываний ClickOnce с цифровым сертификатом является необязательным шагом для проверки того, что сборки и файлы не подверглись изменению.

В следующих разделах описаны различные типы цифровых сертификатов, используемых в Authenticode, как сертификаты проверяются с помощью центров сертификации (ЦС), роли метки времени в сертификатах и методов хранения, доступных для сертификатов.

Проверка подлинности и подписывание кода

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

Существуют различные типы сертификатов Authenticode. Каждая из них настроена для разных типов подписывания. Для приложений ClickOnce необходимо иметь сертификат Authenticode, действительный для подписи кода. Если вы пытаетесь подписать приложение ClickOnce с помощью другого типа сертификата, например цифрового сертификата электронной почты, он не будет работать. Дополнительные сведения см. в разделе "Общие сведения о подписи кода".

Вы можете получить сертификат для подписывания кода одним из трех способов:

  • Приобретите его у поставщика сертификатов.

  • Получите один от группы в вашей организации, ответственной за создание цифровых сертификатов.

  • Создайте собственный сертификат с помощью командлета PowerShell New-SelfSignedCertificate или с помощью MakeCert.exe, который входит в состав пакета SDK для Windows.

Использование центров сертификации помогает пользователям

Сертификат, созданный с помощью New-SelfSignedCertificate или служебной программы MakeCert.exe, обычно называется самоподписанным сертификатом или тест-сертификатом. Этот тип сертификата работает аналогично snk-файлу в .NET Framework. Он состоит исключительно из пары открытого и закрытого криптографического ключа и не содержит проверяемой информации о издателе. Вы можете использовать самозаверяющие сертификаты для развертывания приложений ClickOnce с высоким уровнем доверия в интрасети. Однако, когда эти приложения выполняются на клиентском компьютере, ClickOnce определит их как поступающие из неизвестного издателя. По умолчанию приложения ClickOnce, подписанные с помощью самозаверяемых сертификатов и развернутые через Интернет, не могут использовать развертывание доверенных приложений.

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

Дополнительные сведения о создании самозаверяющих сертификатов см. в статье New-SelfSignedCertificate или MakeCert.

Временные метки

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

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

Обновление сертификатов с истекшим сроком действия

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

  • Обновите .NET Framework версии 3.5 или более поздней.

  • Удалите приложение и переустановите новую версию с допустимым сертификатом.

Хранение сертификатов

  • Сертификаты можно хранить в виде PFX-файла в файловой системе или хранить их в контейнере ключей. У пользователя в домене Windows может быть несколько ключевых контейнеров. По умолчанию MakeCert.exe будет хранить сертификаты в контейнере личных ключей, если не указать, что он должен сохранить их в .pfx. Mage.exe и MageUI.exe, средства пакета SDK для Windows, предназначенные для создания развертываний ClickOnce, позволяют использовать сертификаты, хранящиеся в любом формате.