设计简单而安全的应用包 – APPX

Windows 8 应用程序开发人员博客

有关为 Windows 8 生成 Metro 风格应用程序的见解,来自 Windows 8 工程团队

设计简单而安全的应用包 – APPX

  • Comments 0

开始在新的 Windows 8 开发平台上工作时,可能第一个要问的问题就是“如何以一种简单而安全的格式打包应用程序”?在 Windows 8 之前,有两种主要的安装技术:Windows InstallerClickOnce。如提供可靠、可信的应用博文中所述,有许多产品可以帮助开发者管理安装和更新应用程序的复杂性,但是,应用程序打包、安装和更新仍然是困扰开发者和最终用户的一个棘手问题。对应用程序打包和部署的主要目的是取代同时安装脚本——这样整个过程将更为简单明了。

既要支持针对本机代码和托管代码的现有技术,同时还要支持通过 Windows 运行时提交的新技术,Windows 应用商店应用也受到了更多的挑战。更为重要的是,我们希望向那些极富创意但是刚开始学习开发应用程序的新手开发者开放应用程序构建。我们所需要的,是便于开发者使用,是支持各种应用程序技术,是方便打包和更新还要安全、智能和简洁 - 是的,这一长串需求都要满足!Windows 8 APPX (“.appx”) 应用包格式可以满足上述的需要。

简单

我们的目标就是要简单。以前的安装程序技术要求您学习如何编写安装脚本或者要使用特殊的工具,将应用构建成为一种专门的二进制格式。对于 Windows 应用商店应用,我们考察现有资源,在现有标准的基础上来构建,而非另外创建一个格式。我们汇总了所有找到的已知的应用打包技术,寻找每种技术的来源,并且权衡不同技术的优劣。在反复讨论之后,我们决定使用一种简单但很常用的技术 – ZIP。

ZIP 使用非常广泛,它是 1989 年开发出的一项比较古老的技术,利弊都有。利用 ZIP 的优点在于它得到广泛地使用和支持,但是不好的一面是它早于许多新型技术高级功能(如现代的 Web 和 XML)之前开发出来。另外,ZIP 格式规范包括对许多过时功能(如跨多个软盘)的要求,这些功能与今天的新技术已经毫无关联。还有一个最大的挑战就是,尽管 ZIP 是一个事实上的标准,但是它却不是一个开放式的国际标准。现在我们来了解 OPC。

构建于以下标准之上:ZIP + Web + XML = OPC

2006 年,Office 团队与其他 Microsoft 小组合作,开发并推出了一个新的开放打包惯例 (OPC) 标准,旨在作为一种开放式的国际标准。OPC 最初发布于 2006,作为 ECMA 国际标准 ECMA 376-2 发布,2008 年被国际标准组织采用,作为 ISO/IEC 29500-2 发布。

构建于以下标准之上

图文块 1:构建于以下标准之上

ECMA 376-2 和 ISO 29500-2 OPC 标准都引用了 APPNOTE.TXT - .ZIP 文件格式规范,但是 OPC 的强项在于它对 ZIP 功能加上具体的限制条件。OPC 还将 Web 技术(例如符合 URI 的名称)的概念以及 XML 的标准集成为机器以及人们均可读的声明性技术。关键点在于 OPC 不仅是一种文件格式;而且,它还是一个基于 ZIP 的容器文件技术,用于定义和创建新的文件格式。除了 Office 10 Word (.docx)、Excel (.xlsx) 和 PowerPoint (.pptx) 格式都是源自 OPC 以外,OPC 也逐渐在许多新的 Microsoft 和第三方文件格式中通用起来(维基百科:使用 OPC 的文件格式)。

OPC 的另一个优势是,对托管代码 (Sytem.IO.Packaging) 和本机代码(数据访问和存储 | 打包),都有经过测试随时可用的现成 OPC API。使用公共 OPC API 作为基础,我们创建了特别适用于 APPX 的公共应用打包和部署 API。APPX API 反过来也可用于构建相关联的应用打包工具。所有 APPX 工具和 API 都作为 Windows 8 SDK 的一部分面向公众提供。

应用构建基础

可以使用 Visual Studio Express 2012 提供的 IDE,也可以“独立”使用诸如简单的文本编辑器之类的工具再结合 Windows 8 SDK 中提供的应用打包工具 MakeAppx.exe,来构建 Windows 应用商店应用。例如,可以仅使用文本编辑器或您喜欢的 HTML 编辑器编写简单的 web 应用,然后利用与 ZIP 工具类似的 MakeAppx 实用工具打包。

APPX 的一个重要功能是声明性 XML,可以用于定义部署、显示和更新应用所需的应用系统要求。并不使用二进制数据库(要求特殊工具以及自定义脚本),应用程序包清单(在 “AppxManifest.xml” 中定义)指定了应用程序使用的标识依赖项功能可视元素合约等应用程序详细信息。每个 Windows 应用商店应用均包一个包清单文件。Visual Studio 将自动为您创建一个,或者您可以使用您喜欢的文本编辑器手动创建包清单。下面的代码示例显示了一个样本 AppxManifest.xml 文件。

<Package xmlns="http://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 实用工具在构建每个 APPX ZIP 包时都创建并插入了一个 AppxBlockMap.xml 文件。块映射文件为包中的每个文件存储加密块哈希,在对包签名时块映射文件本身利用数字签名获得验证以及安全保护。块映射文件允许以增量地方式下载并审核 APPX 包,还可以在安装应用文件后支持对其进行各种更新。

下图显示了使用 Visual Studio 11 Express 或 MakeAppx.exe 实用工具将应用文件组织整理到 APPX 包的过程。

利用 Visual Studio 11 Express 或 MakeAppx 实用工具创建 APPX 包

图文块 2:利用 Visual Studio 11 Express 或 MakeAppx 实用工具
创建 APPX 包

简化应用程序打包只是第一步。下一步就是简化应用程序的安全保护。

安全

应用程序安全当然是值得关注的重点问题,特别是对于使用者来说。和许多其他打包技术一样,APPX 包使用数字签名来保护应用安全。数字签名不能防止签名的应用程序内容被篡改,但是如果签名内容中的任意项目已经更改,则将无法通过签名检查。

对于开发的应用要通过 Windows 应用商店分发出去的开发者来说,签名非常简单,应用商店可以代您进行检查。您创建应用程序之后,可以登录到 Windows 应用商店开发者门户并上载 (https) 您的 .appx 文件。Windows 应用商店执行一系列的检查,然后使用包含注册的开发者姓名的证书对您的应用进行签名。一经签名后,该应用就会公布到 Windows 应用商店,使用者可以下载并部署 – 再简单不过了!

如果您是为企业构建应用或为测试之用,您还可以独立地对 APPX 包进行签名。Visual Studio Express 2012 可以帮助您完成此操作,或者您可以使用标准 Windows SignTool 实用工具将验证码签名添加到您的包中。图文块 3 显示使用 Visual Studio Express 或 Windows SignTool 的 APPX 包的签名过程。

利用 Visual Studio 11 Express 或独立使用 SignTool 对 APPX 包进行签名

图文块 3:利用 Visual Studio 11 Express 或独立使用 SignTool
对 APPX 包进行签名

数字签名提供两种主要功能:

  • 安全地标识签名的发起人(即签名的人)
  • 确认签名的内容未被更改

APPX 包为安全性设置了一个坚固的防线 - 所有 APPX 包必须经过签名,并且只有签名通过审核后才能安装包。有了签名,用户就可以放心地运行应用,并且提供一种方式来定期验证原始应用文件没有被恶意用户或第三方软件修改。对于从 Windows 应用商店下载包的使用者,应用必须通过 Windows 应用商店的品质检查和反病毒检查,然后由 Windows 应用商店进行签名,然后才对用户提供下载。

应用安全性

APPX 数字签名支持多种用途,并且其具有的几种设计特征,能帮助企业 IT 管理人员和第三方开发者更好理解此功能。Windows 应用商店应用使用了一种由三部分组成的安全模型:

  • 打包的应用安全性
  • 部署的应用安全性
  • 运行时应用安全性

打包的应用安全性

通常,大多数安装程序技术会将部署容器签名为一个单元。APPX 包数字签名设计为作为一个包单元提供审核或以增量方式提供审核。

包审核

将 APPX ZIP 文件签名为一个单元,为整个包提供了最初级别的保护。除了在 ZIP 内存储的应用内容文件,ZIP 文件还包含必须保护的内部结构(例如,本地文件标头、数据描述符以及中央目录)。将 APPX 签名为一个单元,在检查是否有改动的时候可以确保所有内容(包括内部结构)都得到数字签名的审核。

增量审核

签名为一个单元时,必须提交整个文件以审核该包。当通过 web 传输包时,最好快速并尽早检测到内容未通过检查。为此,每个 APPX 包都包含 AppxBlockmap.xml 文件,该文件为每个应用内容文件中包含的每个块指定加密哈希。使用 AppxBlockmap.xml 文件中包含的哈希值,每个应用程序文件的内容都可以在通过 web 下载的过程中以增量地方式进行审核。

部署的应用安全性

尽管先前的技术允许逐个地对某些文件(.exe 的和 .dll 的)进行签名,除非特定文件类型本身支持数字签名,许多类型的应用程序文件安装后就没有办法对其进行审核。

文本、JavaScript、XML 和许多其他通用文件类型不能本机支持数字签名。APPX 数字签名设计的一个特点就是通过将打包的 APPX 签名文件(AppxSignature.p7x 和 AppxBlockmap.xml)和复制到客户端的其他应用程序内容文件一同部署,这样就可以在以后重新审核任意或所有应用程序文件。

重要:APPX 数字签名有效地对应用包内包含的每个文件进行签名,还可以用于在应用文件被提取并安装到磁盘上之后对其进行审核!

appx_deployment

图文块 4:部署已签名的 APPX 包

运行时应用安全性

通过在受特别保护的应用容器环境内执行运行时,Windows 应用商店应用已经改进了运行时安全性。如果某个应用在其容器内执行,它不能直接与其他应用交互或影响其他应用。另外,应用还对硬件和系统资源具有有限的封闭性访问。提供可靠、可信的应用博文重点介绍了应用容器环境的功能。

总结

Windows 应用商店应用的全新 APPX 包格式采用创新性技术,令应用打包简便而安全可靠。这些包利用基于 OPC 格式的标准,可以使用 Visual Studio Express 2012 或单独的 MakeAppx 工具很方便地创建应用包。通过使用数字签名,我们可以确保每个包都是有效的,并且最终用户都可以安心地使用。

祝您使用 APPX 包构建应用程序一切顺利!

-- Windows 项目经理 Jack Davis

  • Loading...
Leave a Comment
  • Please add 5 and 3 and type the answer here:
  • Post