Microsoft Updater Application Block 1.4.1 验证器设计 [翻译]
Microsoft Updater Application Block 验证器设计
译者:Tony Qu
Updater Application Block提供了一个可扩展的验证器架构,这使通过签名或哈希号验证下载文件成为可能。验证器架构支持在服务器上生成签名和在客户端上确认这些签名。
图1 展示了服务器端的验证架构
通过图1我们可以了解到验证器架构的以下几个方面
1. manifest工具会初始化一个用户指定类型的验证器。所有的验证器必须实现IValidator接口。用户还必须为验证器指定一个密钥,传递给验证器。
2. 验证器为位于服务器端的应用程序升级目录中的每一个文件生成一个签名,生成的值会被写入manifest文件中。
3. 最后,验证器会为每一个manifest文件计算出一个签名,该签名会被写入manifest文件中的根节点的signature属性中。
注意:更多有关manifest文件设计的信息,可以参考 服务器端manifest文件设计
当manifest文件和升级文件被下载到客户端之后,必须通过验证签名来确认下载的文件未损坏。
图2 展示了客户端的验证架构。
通过图2,我们可以了解验证架构的以下几个方面:
1. ApplicationUpdaterManager类使用UpdaterConfiguration类的Instance属性读取配置文件的<validator>节。这个部分包含将要被使用的验证器的完整集合和类型名。更多有关应用程序配置文件设计的信息可以参考 应用程序升级器配置文件设计。
2. ValidatorFactory类用于初始化指定的验证器,该验证器实现了IValidator接口。ValidatorFactory类还会传递<validator>节点的配置信息到验证器的Init方法中。这个配置节通常包含一个密钥,该密钥可用来验证签名。
3. 最后,ApplicationUpdaterManager类为每一个待升级的应用程序初始化一个DownloaderManager类,并把它传给验证器。Downloader会不时地检查下载任务的状态是否为JobStatus.Ready,并且使用验证器验证下载文件的签名。当文件通过验证后,DownloaderManager把文件从临时目录中拷贝到适当的应用程序目录,并且执行一个在manifest文件中指定的后处理器[post processor]。你可以通过修改<application>元素的useValidation属性为false禁止一个应用程序的验证工作,在这种情况下,DownloaderManager将只是把所有的下载文件拷贝到它们的应用程序目录中,并允许特定的后处理器。
注意:使用useValidation属性时要小心,如果把值设置为false将降低安全性,并有可能造成未验证的代码程序在客户端上安装。
Updater Application Block包含两个验证器。一个是KeyValidator,使用对称加密密钥生成和验证签名。一个是RSAValidator,使用公钥/私钥对实现验证。你可以使用其中的任何一个验证器,或者你可以通过实现IValidator接口开发你自己定制的验证器。
版权声明:本文由作者Tony Qu原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。