Поделиться через


Настройка надежных издателей ClickOnce

 

Брайан Нойес
Microsoft MVP

Апрель 2005 г.

Область применения:
   Visual Studio 2005

Сводка: Безопасность ClickOnce позволяет воспользоваться преимуществами защиты среды выполнения, предоставляемых code Access Security, при этом позволяя динамически определять разрешения для конкретного приложения в точке развертывания приложения с помощью ClickOnce. (11 печатных страниц)

Содержимое

Доверенные издатели и подписывание приложений ClickOnce 101
Проверки безопасности ClickOnce при запуске
Попасть в зону
ClickOnce Trusted Publishers in Action
Автоматизация процесса
Заключение
Об авторе

Безопасность ClickOnce обеспечивает автоматическое повышение привилегий для приложения, развернутого в ClickOnce, на основе запросов пользователя или доверенных издателей. При развертывании приложения с помощью ClickOnce для операций, выполняемых приложением, или для ресурсов, к которым оно пытается получить доступ, могут потребоваться разрешения на доступ к коду (CAS), превышающие разрешения, предоставляемые на основе текущей политики. В этом случае среда выполнения платформа .NET Framework на клиентском компьютере по умолчанию запрашивает у пользователя запрос на установку приложения и предоставление ему повышенного доверия.

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

Доверенные издатели и подписывание приложений ClickOnce 101

Так что же представляет собой доверенный издатель? Во-первых, необходимо всегда подписывать манифесты развертывания и приложения ClickOnce с помощью сертификата издателя. Затем сертификат, используемый для подписи приложения ClickOnce, должен быть настроен в хранилище сертификатов Trusted Publishers на компьютере пользователя. Наконец, центр сертификации, выдавающий сертификат, должен быть настроен в хранилище сертификатов доверенного корневого центра сертификации на компьютере пользователя. Я буду очищать слои каждой из этих трех частей по очереди.

При первом создании приложения Windows Forms в Visual Studio 2005 и его публикации с помощью ClickOnce Visual Studio автоматически создаст для вас сертификат издателя и будет использовать его для подписывания приложения при его публикации. При этом создается файл личного сертификата (PFX-файл) и он добавляется в проект Visual Studio с соглашением <об именовании файлов по умолчанию ProjectName>_TemporaryKey.pfx. Visual Studio также добавит этот сертификат в ваше личное хранилище сертификатов и включит параметры проекта, которые задают этот сертификат как тот, который будет использоваться для подписывания манифестов приложения ClickOnce. Так как все это происходит автоматически, вы можете даже не знать, что это происходит.

Примечание Бета-версия 1 позволяет строго именовать манифесты с помощью файла ключа строгого имени (SNK-файл по соглашению). Бета-версии 2 и RTM больше не поддерживают эту функцию, и вы должны подписать манифесты с помощью сертификата издателя, как правило, PFX-файла, который может быть защищен паролем или не может быть защищен паролем.

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

Сертификаты издателя поставляются в двух вариантах: самостоятельно созданные или сторонние сертификаты (например, verisign). Сертификат выдается центром сертификации, который сам имеет сертификат, который идентифицирует его как центр выдачи сертификатов. Вы создаете собственный сертификат в целях разработки, и вы, по сути, становитесь как центром сертификации, так и издателем, который представляет сертификат. Для использования в рабочих целях необходимо использовать сертификат, созданный третьей стороной, либо внешней компанией, например Verisign, либо внутренним центром, например администратором домена, в корпоративной среде.

Чтобы считаться доверенным издателем, сертификат издателя должен быть установлен в хранилище сертификатов доверенных издателей на компьютере пользователя, а центр выдачи сертификата издателя должен иметь собственный сертификат, установленный в хранилище сертификатов доверенного корневого центра сертификации. Вы можете использовать certmgr.exe сертификатов консоль управления в Windows для управления сертификатами и их установки в хранилищах на компьютере, а также с помощью Visual Studio 2005. Я пошаговую процедуру использования Visual Studio далее в этой статье.

Проверки безопасности ClickOnce при запуске

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

Если на клиентском компьютере неизвестны как издатель сертификата, так и издатель, представленный сертификатом (на основе сертификатов, установленных в хранилищах), пользователю будет предложено открыть диалоговое окно, показанное на рис. 1, и он сможет решить, следует ли разрешить приложению получать необходимые привилегии. в зависимости от зоны, из которой запускается приложение. Если щелкнуть ссылку Дополнительные сведения... внизу, появится диалоговое окно, показанное на рисунке 2, которое дает пользователю более подробные сведения о том, что произойдет, если он нажмет кнопку Установить , но в целом, скорее всего, просто напугает его, как и большинство диалоговых окон безопасности, так как оно дает очень мало информации о том, что происходит на самом деле.

Рис. 1. Запрос пользователя недоверенного издателя и центра сертификации

Рис. 2. Диалоговое окно "Дополнительные сведения"

Если сертификат, используемый для подписи манифестов приложения, создается доверенным корневым центром сертификации, но конкретный сертификат издателя не находится в хранилище доверенных издателей, пользователю по-прежнему будет предложено, но с немного более понятным запросом, чем при неизвестном издателе сертификата издателя (см. рис. 3). Более понятный запрос указывает на организацию издателя, так как с помощью технологии сертификата Authenticode и доверенных корней можно по крайней мере доверять тому, что издательская организация соответствует издателю сертификата. Если вы доверяете центру выдачи, вы можете верить, что издатель не притворяется тем, кем он не является.

Рис. 3. Запрос пользователя доверенного центра сертификации

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

Попасть в зону

Существует пять встроенных зон безопасности, которые используются в cas для принятия решений о доверии на основе источника: MyComputer, LocalIntranet, Internet, TrustedSites и UntrustedSites. Эти же зоны используются для определения того, какой тип запроса должен быть разрешен пользователям в отношении повышения разрешений приложения ClickOnce. Каждая зона соответствует контексту, из которого запускается приложение ClickOnce, который определяется полным адресом пути, который использовался к манифесту развертывания (файлу приложения) для приложения ClickOnce.

В таблице 1 приведены некоторые примеры зон запуска на основе адреса, используемого для манифеста развертывания. То, на что он в основном разбивается, так это если адрес является локальным путем к файлу на диске, не подключенном к сети, приложение будет запущено в зоне MyComputer. Если адрес использует сетевой протокол (общий файловый ресурс HTTP или UNC), а серверная часть адреса является одним именем компьютера, он будет оцениваться как поступающий из зоны LocalIntranet. Если часть адреса имени сервера содержит точки, она оценивается как полученная из зоны Интернета. TrustedSites и UntrustedSites зависят от отдельных адресов, настроенных как часть параметров безопасности надежных сайтов и сайтов с ограниченным доступом в Интернете Обозреватель.

Таблица 1. Примеры зоны запуска ClickOnce

Адрес запуска Зона запуска
http://deploymentserver/MyClickOnceApp/MyClickOnceApp.application LocalIntranet
\\deploymentserver\MyClickOnceApp\MyClickOnceApp.application LocalIntranet
http://some.dotted.servername/Apps/MyClickOnceApp.application Интернет
\\127.0.0.1\sharefolder\MyClickOnceApp.application Интернет
C:\inetpub\wwwroot\MyClickOnceApp\MyClickOnceApp.application MyComputer

По умолчанию MyComputer, LocalIntranet и TrustedSites настроены таким образом, чтобы разрешить пользователю повысить привилегии безопасности приложения ClickOnce, если это приложение не подписано доверенным издателем. По умолчанию для зоны Интернета манифест приложения подписывается сертификатом издателя, выданным доверенным корневым центром, при необходимости это приложение может запрашивать у пользователя повышенные разрешения (то есть сертификат издателя также не устанавливается в хранилище доверенных издателей). Если приложение, запущенное с помощью interne, не подписано сертификатом, выданным доверенным корневым центром, оно не будет разрешено выполняться. По умолчанию зона UntrustedSites заключается в том, что если приложение не подписано доверенным сертификатом издателя, выданным доверенным корневым центром, приложение не будет разрешено выполнять (иными словами, запросы пользователя запрещены).

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

Раздел реестра \HKLM\Software\Microsoft\. NETFramework\Security\TrustManager\PromptingLevel позволяет настроить поведение запроса. Этот ключ отсутствует по умолчанию после установки платформа .NET Framework 2.0, поэтому его придется создать вручную, если вы хотите настроить эти параметры.

В этом разделе реестра можно добавить любое из 5 строковых значений с именами MyComputer, LocalIntranet, Internet, TrustedSites и UntrustedSites. Они соответствуют соответствующим зонам. В качестве значения для них можно задать одну из трех строк: Enabled, Disabled или AuthenticodeRequired. Включен по умолчанию для зон MyComputer, LocalIntranet и TrustedSites. Интернет по умолчанию — AuthenticodeRequired, а для untrustedSites — Отключено. В таблице 2 показаны значения, которые можно задать для каждой зоны и их эффекты. На рисунке 4 показаны значения раздела реестра, для которых задано поведение по умолчанию, но помните, что этот раздел не существует по умолчанию, поэтому обычно его можно создать только в том случае, если вы собираетесь задать для них значения, отличные от значений по умолчанию.

Таблица 2. Эффекты запуска значения параметра реестра PromptingLevel

Значение Ненадежный корневой центр Сертификат, выданный доверенным корневым центром Доверенный корневой центр и сертификат доверенного издателя
Активировано Недружественный запрос пользователя Понятный запрос пользователя Нет запроса; предоставленные разрешения и запуски приложений
AuthenticodeRequired Приложение отключено Понятный запрос пользователя Нет запроса; предоставленные разрешения и запуски приложений
Выключено Приложение отключено Приложение отключено Нет запроса; предоставленные разрешения и запуски приложений

Рис. Значения раздела реестра с запросом пользователя

ClickOnce Trusted Publishers in Action

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

Чтобы создать в Visual Studio 2005 новый файл сертификата, защищенный паролем, перейдите в окно свойств проекта (дважды щелкните узел Свойства в Обозреватель решений или щелкните правой кнопкой мыши узел проекта и выберите в контекстном меню пункт Свойства). Перейдите на вкладку Подписывание, проверка поле Подписать манифесты ClickOnce проверка и нажмите кнопку Создать тестовый сертификат... (см. рис. 5). Вам будет предложено ввести пароль, а в проект будет добавлен новый PFX-файл с именем по умолчанию. Этот сертификат также будет установлен в качестве сертификата, используемого для подписывания манифестов, и будет установлен в личном хранилище сертификатов в Windows. Затем можно переименовать файл, скопировать его в повторное расположение, а затем настроить этот сертификат в качестве сертификата для любого приложения, нажав кнопку Выбрать из файла... на вкладке Подписывание .

Рис. 5. Подписывание свойств проекта

Получив сертификат и определив, какой из них следует использовать для подписывания манифестов ClickOnce в свойствах проекта Подписывание, вы можете опубликовать приложение из Visual Studio, и манифесты будут подписаны этим сертификатом. Если у вас есть "реальный" сертификат издателя (то есть сертификат Verisign или сертификат, который используется вашей организацией разработки, подписанный каким-либо другим доверенным корневым центром), его можно использовать либо из файла, как описано выше, либо указав сертификат в личном хранилище сертификатов с помощью кнопки Выбрать из хранилища... в свойствах проекта Подписывание.

Чтобы узнать, как избежать запроса пользователя при развертывании доверенного издателя, необходимо настроить сертификат издателя на компьютере, где будет запущено приложение с помощью ClickOnce, который часто является компьютером разработки для первых пробных версий и целей разработки. Если вы создали сертификат самостоятельно, как описано выше (или с помощью программы командной строки makecert.exe, которая поставляется с Visual Studio), необходимо добавить этот сертификат в хранилище доверенных корневых центров сертификации. Это связано с тем, что вы являетесь не только издателем, но и издателем сертификата. Затем вы также захотите установить тот же сертификат в хранилище доверенных издателей, что является последним шагом, который позволяет приложению запускаться без запроса.

Чтобы сделать все это конкретным, давайте рассмотрим пример с цифрами. Запустите новый проект приложения Windows в Visual Studio 2005 и назовите его ClickOnceTrustedPub. После создания проекта перейдите к свойствам проекта, дважды щелкнув узел Свойства в дереве Обозреватель решений под узлом проекта, и выберите вкладку Подписывание.

Затем установите флажок Подписать манифесты ClickOnce. Нажмите кнопку Создать тестовый сертификат... и введите пароль для сертификата. Файл, который будет создан и добавлен в проект, будет называться ClickOnceTrustedPub_TemporaryKey.pfx. В Обозреватель решений переименуйте его в devcert.pfx. Это также хорошее время, чтобы скопировать файл в общую папку разработки на компьютере, чтобы вы могли повторно использовать его для последующих проектов и не нужно продолжать повторно создавать и настраивать сертификаты. При создании файла сертификата Visual Studio также устанавливает его в личное хранилище сертификатов.

Чтобы добавить этот сертификат в хранилища доверенного корневого центра сертификации и доверенного издателя, нажмите кнопку Дополнительные сведения на вкладке Свойства проекта подписывания. Откроется диалоговое окно сведений о сертификате (см. рис. 6). Нажмите кнопку Установить сертификат... в нижней части вкладки Общие , и откроется мастер импорта сертификатов.

Рис. 6. Диалоговое окно сведений о сертификате

На втором шаге мастера выберите переключатель Разместить все сертификаты в следующем хранилище, а затем нажмите кнопку Обзор (см. рис. 7). Откроется диалоговое окно, в котором можно выбрать из списка хранилищ сертификатов (см. рис. 8).

Рис. 7. Выбор хранилища в мастере сертификатов

Рис. 8. Диалоговое окно выбора хранилища сертификатов

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

Повторите описанный процесс, начиная с кнопки Дополнительные сведения , но на этот раз установите тот же сертификат в хранилище доверенных издателей.

После этого вы можете опубликовать приложение с помощью ClickOnce. Для этого выберите Опубликовать<имя проекта> в меню Сборка в Visual Studio и нажмите кнопку Готово в появившемся мастере. Вы создадите приложение, опубликуете его с параметрами публикации ClickOnce по умолчанию и откроется веб-страница, на которой можно протестировать установку в качестве клиента, нажав кнопку Установить на веб-странице. Если нажать эту кнопку, приложение должно скачать и запустить на рабочем столе без каких-либо запросов. Разрешения по умолчанию, запрашиваемые приложением ClickOnce, являются неограниченными (полное доверие), а для ссылки кнопки Установить по умолчанию используется URL-адрес зоны LocalIntranet. Таким образом, если вы повторили этот же процесс, не настроив сертификат доверенного издателя, вам будет предложено диалоговое окно, показанное на рис. 1.

Автоматизация процесса

В рабочей среде с большим количеством пользовательских компьютеров, которые необходимо обслуживать, вы не будете иметь Visual Studio на каждом компьютере для настройки сертификатов издателя, поэтому вам потребуется использовать консоль управления сертификатов (certmgr.exe), включенных в Windows. Если запустить certmgr.exe без аргументов из командной строки, появится окно консоли управления (MMC), позволяющее добавлять или удалять сертификаты из любого хранилища на локальном компьютере. Но даже при этом вам может не потребоваться касаться каждого компьютера, чтобы настроить сертификаты. Процесс также можно автоматизировать с помощью certmgr.exe с некоторыми параметрами командной строки.

Сначала необходимо экспортировать общедоступную часть сертификата в файл сертификата (CER) из certmgr с помощью кнопки Экспорт :

Рис. 9. Certmgr.exe экспорт сертификатов

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

certmgr –add alice.cer –s Root
certmgr –add alice.cer –s TrustedPublisher

Все это можно создать или добавить в пользовательский установщик с помощью проекта установки и развертывания Visual Studio (или какой-либо другой формы установщика), а полученный пакет установщика Windows (.msi файл) можно добавить в начальный загрузчик приложения ClickOnce. Дополнительные сведения о начальном загрузчике см. в статье Шона Слива Использование начального загрузчика Visual Studio 2005 для Kick-Start установки в выпуске журнала MSDN Magazine за октябрь 2004 г.

Заключение

Безопасность ClickOnce позволяет воспользоваться преимуществами защиты среды выполнения, предоставляемых code Access Security, при этом позволяя динамически определять разрешения для конкретного приложения в точке развертывания приложения с помощью ClickOnce. Тем не менее, эта гибкость имеет определенную цену— вы должны решить, следует ли разрешить пользователю отвечать за повышение разрешений приложений с помощью запросов, и нужно ли, чтобы этот запрос основывался на том, откуда получен сертификат издателя. Поведение ClickOnce по умолчанию проще всего понять. Либо приложение автоматически повышает свои разрешения, так как оно развертывается у доверенного издателя, либо запрашивает у пользователя возможность разрешить ему решить, следует ли доверять издателю. В более управляемых средах может потребоваться ограничить запросы пользователей. В этой статье описано, как это можно сделать с помощью раздела реестра PromptingLevel и настройки сертификатов издателя и доверенного корневого центра на компьютере пользователя. Чтобы правильно использовать защиту ClickOnce, важно понимать влияние различных значений и их поведение с разными конфигурациями хранилища сертификатов.

 

Об авторе

Брайан Нойес (Brian Noyes) — MVP корпорации Майкрософт, известный оратор, тренер, писатель и консультант компании IDesign, Inc. (www.idesign.net). Он выступает на конференциях TechEd в США и Малайзии, Visual Studio Connections, VSLive!, DevEssentials и других конференциях, а также является одним из ведущих докладчиков в Бюро ораторов INETA. Он опубликовал многочисленные статьи о разработке платформа .NET Framework для msdn Magazine, Visual Studio Magazine, asp.netPRO, .NET, CoDe Magazine, .NET Developer Journal и других публикаций. Его последняя книга ,Привязка данных в Windows Forms 2.0, часть серии разработки Addison-Wesley .NET, появится на полках осенью 2005 года. Брайан начал программирование, чтобы стимулировать свой мозг во время полета F-14 Tomcats в военно-морском флоте, применяя свои навыки и интерес к программированию самолетов и авионики моделирования, прототипы, и поддержки приложений, стимулируя его надпочечники посещая Top Gun и военно-морской школы летчиков-испытателей США.