Создание простых и безопасных пакетов приложений — APPX

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

К приложениям Магазина Windows было предъявлено дополнительное требование — они должны поддерживать обе существующие технологии для собственного кода и управляемого кода, а также новую технологию, реализуемую через среду выполнения Windows. И что еще более важно, мы хотели открыть возможности создания приложений для новой группы разработчиков — разработчиков, у которых были отличные новые идеи, но которые еще только учились создавать приложения. Нам требовалось нечто простое в использовании, поддерживающее широкий диапазон технологий создания приложений и обеспечивающее эффективную упаковку, установку и обновление приложений. Нечто безопасное и, желательно, простое — получился целый список требований! В результате был создан формат пакета приложения Windows 8 APPX (".appx").

Простота

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

Как бы ни был популярен ZIP, это старая технология, используемая с 1989 года. Это и хорошо, и плохо. Хорошо то, что ZIP широко известен и поддерживается, но плохо то, что он был создан до появления многих более новых технологических достижений, таких как современный Интернет и XML. Кроме того, спецификация формата ZIP содержит требования, связанные со множеством устаревших компонентов (таких как поддержка архивации на несколько дискет — помните о таких?), не имеющих отношения к современным технологиям. Одной из сложнейших проблем, однако, было то, что хотя ZIP фактически и является стандартом, на самом деле он не был открытым международным стандартом. Таким стандартом является OPC.

Разработка на основе стандартов: ZIP + Интернет + XML = OPC

В 2006 г. рабочая группа по Office, работавшая в сотрудничестве с другими группами корпорации Майкрософт, предложила выпустить новый стандарт Open Packaging Conventions (OPC) как открытый международный стандарт. OPC был изначально выпущен в 2006 г. как стандарт ECMA International в спецификации ECMA 376-2, а в 2008 г. он был принят организацией International Standards Organization в спецификации ISO/IEC 29500-2.

Разработка на основе стандартов

Рисунок 1. Разработка на основе стандартов

Стандарты ECMA 376-2 и ISO 29500-2 OPC ссылаются на APPNOTE.TXT — спецификацию формата файлов ZIP, но сильная сторона OPC заключается в особых качествах, накладываемых им на функции ZIP. Кроме того, OPC интегрирует понятия веб-технологий (например, имена, совместимые с URI) и обеспечивает стандартизацию на основе XML как декларативной технологии, понятной и людям, и компьютерам. Ключевым моментом является то, что OPC — не просто формат файлов, это еще и технология файлов-контейнеров на основе ZIP для определения и создания новых форматов файлов. OPC был создан для форматов Office 10 Word (.docx), Excel (.xlsx) и PowerPoint (.pptx) и набирает популярность с появлением множества новых форматов файлов Майкрософт и сторонних компаний (Википедия: форматы файлов с использованием OPC).

Еще одно преимущество OPC состоит в том, что существовали общедоступные API-интерфейсы OPC, которые были протестированы и готовы к использованию как для управляемого кода (Sytem.IO.Packaging), так и для собственного кода (Data Access and Storage | Packaging). Опираясь на общедоступные API-интерфейсы OPC, мы создали общедоступные API-интерфейсы упаковки и развертывания приложений, специально предназначенные для APPX. API-интерфейсы APPX, в свою очередь, используются для создания связанных инструментов упаковки приложений. Все инструменты и API-интерфейсы APPX являются общедоступными и входят в состав Windows 8 SDK.

Основы создания приложений

Приложения Магазина Windows могут создаваться с использованием интегрированной среды разработки (IDE), предоставляемой Visual Studio Express 2012, или "автономно" — с использованием таких инструментов, как простой текстовый редактор в сочетании со средством упаковки приложений MakeAppx.exe, входящем в состав Windows 8 SDK. Например, простые веб-приложения можно написать с помощью текстового редактора или предпочитаемого редактора HTML, а затем упаковать с помощью служебной программы MakeAppx, работающей аналогично ZIP-архиватору.

Ключевым компонентом пакетов APPX является декларативный XML, используемый для определения системных требований приложения, необходимых для развертывания, отображения и обновления приложения. Вместо использования двоичной базы данных, для которой требуются особые инструментальные средства, а часто и написание собственного скрипта, манифест пакета приложения, определенный в "AppxManifest.xml", указывает информацию о приложении: учетные данные, зависимости, возможности, визуальные элементы и контракты, используемые данным приложением. Каждое приложение Магазина Windows содержит файл манифеста пакета. Visual Studio создаст для вас такой файл автоматически, или вы можете создать манифест пакета вручную с помощью предпочитаемого текстового редактора. В этом примере кода представлен образец файла AppxManifest.xml.

 <Package xmlns="https://schemas.microsoft.com/appx/2010/manifest">
  <Identity Name="MyCompany.MyAppSuite.MyApp" Version="1.0.0.0"
        Publisher="CN=C58FDA15-2FCE-4CFB-ACA0-3981ED7222D7" />
  <Properties>
    <DisplayName>Postcards</DisplayName>
    <PublisherDisplayName>MyCompany</PublisherDisplayName>
    <Logo>images\MyCompanyLogo.png</Logo>
  </Properties>
  <Resources>
    <Resource Language="en-US" />
  </Resources>
  <Prerequisites>
    <OSMinVersion>6.2</OSMinVersion>
    <OSMaxVersionTested>6.2</OSMaxVersionTested>
  </Prerequisites>
  <Applications>
    <Application Id="App" StartPage="default.html">
      <VisualElements DisplayName="Postcards App" Description="Postcards App ..."
           Logo="images\postcards-logo-lg.png" SmallLogo="images\postcards-logo-sm.png"
           ForegroundText="light" BackgroundColor="#0084FF" ToastCapable="true">
        <DefaultTile ShowName="true" />
        <SplashScreen BackgroundColor="" Image="images\postcards-splash.png" />
      </VisualElements>
      <Extensions>
        <Extension Category="windows.search" StartPage="default.html" />
      </Extensions>
    </Application>
  </Applications>
</Package>

Для обеспечения безопасности все пакеты APPX должны иметь цифровую подпись. Как первый шаг в защите приложения, Visual Studio 2012 и служебная программа MakeAppx создают и вставляют файл AppxBlockMap.xml при создании каждого ZIP-пакета APPX. В файле blockmap хранятся шифрованные хэши блоков для каждого файла, входящего в состав пакета. Сам файл blockmap проверяется и защищается с помощью цифровой подписи при подписывании пакета. Файл blockmap позволяет выполнять добавочную загрузку и проверку пакетов APPX, а также обеспечивает поддержку дифференциальных обновлений файлов приложения после установки.

На следующем рисунке показан процесс использования Visual Studio 11 Express или служебной программы MakeAppx.exe для организации файлов приложения в пакет APPX.

Создание пакета APPX с использованием Visual Studio 11 Express или служебной программы MakeAppx

Рисунок 2. Создание пакета APPX с использованием Visual Studio 11 Express или служебной программы MakeAppx

Упростить упаковку приложения — это один шаг. Следующий шаг — упростить защиту приложения.

Безопасность

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

Для разработчиков, создающих приложения для распространения через Магазин Windows, процесс подписывания прост — об этом позаботится Магазин. После создания приложения вы входите на портал разработчиков Магазина Windows и загружаете (https) ваш APPX-файл. Магазин Windows выполняет ряд проверок, а затем подписывает ваше приложение с использованием сертификата, содержащего ваше зарегистрированное имя разработчика. После добавления подписи приложение размещается в Магазине Windows и может загружаться для развертывания — проще и быть не может!

Если вы создаете приложения для корпоративного использования или для тестирования, вы можете сами подписать свой пакет APPX. Visual Studio Express 2012 помогает это сделать. Или вы можете использовать стандартную служебную программу Windows SignTool для добавления подписи Authenticode к вашему пакету. На рис. 3 представлен процесс добавления подписи для пакета APPX с помощью Visual Studio Express или Windows SignTool.

Подписывание пакета APPX с использованием Visual Studio 11 Express или SignTool (автономно)

Рисунок 3. Подписывание пакета APPX с использованием Visual Studio 11 Express или SignTool (автономно)

Цифровые подписи выполняют две ключевые функции:

  • Безопасное определение автора подписи ("кто подписывает").
  • Проверка того, что подписанный контент не был изменен.

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

Безопасность приложения

Цифровые подписи пакетов APPX выполняют несколько функций, и корпоративным ИТ-администраторам и независимым разработчикам полезно понимать несколько аспектов. Приложения Магазина Windows используют трехкомпонентную модель обеспечения безопасности:

  • Безопасность упакованного приложения.
  • Безопасность развернутого приложения.
  • Безопасность работающего приложения.

Безопасность упакованного приложения

Обычно в большинстве технологий установщика контейнер развертывания подписывается как единое целое. Цифровые подписи пакетов APPX спроектированы так, чтобы обеспечить как проверку пакета в целом, так и добавочную проверку.

Проверка пакета

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

Добавочная проверка

Когда пакет подписан как единое целое, для проверки пакета нужен весь файл. Однако, при передаче файла через сеть желательно обнаруживать проблемы в контенте быстро и как можно раньше. Для этого каждый пакет APPX содержит файл AppxBlockmap.xml, в котором указаны шифрованные хэши для каждого блока, содержащегося в каждом файле контента приложения. Используя значения хэшей из файла AppxBlockmap.xml, можно поэтапно проверить содержимое каждого файла приложения при загрузке через сеть.

Безопасность развернутого приложения

Прежние технологии допускали индивидуальное подписывание определенных файлов (EXE-файлов и DLL-файлов), однако если определенный тип файлов не поддерживал цифровые подписи, то не было способа проверить множество типов файлов приложения после установки.

Текстовые файлы, файлы JavaScript и XML, а также многие другие распространенные типы файлов не имеют встроенной поддержки цифровых подписей. Особенностью структуры цифровой подписи APPX является то, что благодаря развертыванию упакованных файлов подписей APPX (AppxSignature.p7x и AppxBlockmap.xml) вместе с другими файлами контента приложения на клиентском компьютере любой или все файлы приложения могут быть повторно проверены позже.

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

развертывание_appx

Рисунок 4. Развертывание подписанного пакета APPX

Безопасность работающего приложения

Приложения Магазина Windows уже обладают более высоким уровнем безопасности во время работы благодаря выполнению в особой защищенной среде контейнера приложения. Если приложение выполняется внутри своего контейнера, оно не может напрямую взаимодействовать с другими приложениями или влиять на них. Кроме того, такое приложение имеет ограниченный управляемый доступ к оборудованию и системным ресурсам. Особенности среды контейнера приложения рассматриваются в записи блога Создание надежных и заслуживающих доверия приложений.

Заключение

Новый формат пакета APPX для приложений Магазина Windows создан с использованием новейших технологий, делающих процесс упаковки приложения простым и безопасным. Эти пакеты используют преимущества формата OPC, опирающегося на стандарты, и их просто создавать с помощью Visual Studio Express 2012 или автономного средства MakeAppx, упрощающих упаковку вашего приложения. Благодаря использованию цифровых подписей мы можем гарантировать допустимость каждого пакета и безопасность конечных пользователей.

Желаем успехов в создании приложений с использованием пакетов APPX!

-- Джек Дэвис (Jack Davis), руководитель программы — Windows