守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 2557|回复: 1

[框架相关] 是谁把Adobe数字签名的RSL(*.swz)存放到FlashPlayer指定的缓存当...

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52619
    钢镚
    1422

    开源英雄守望者

    发表于 2015-5-6 11:44:34 | 显示全部楼层 |阅读模式

    是谁把Adobe数字签名的RSL存放到FlashPlayer指定的缓存当中的?

    是Flex框架吗?经过试验,这是FlashPlayer自动为我们做的。


    >>FlashPlayer的缓存在哪里?

    (1)。XP系统

            C:/Documents and Settings/用户名/Application Data/Adobe/Flash Player/AssetCache/H7UC3H3Y

    (2)。VISTA和WIN7

            C:/Users/用户名/AppData/Roaming/Adobe/Flash Player/AssetCache/RAU4Y963

    这两个路径的最后一个文件夹名是随机的,另外拷贝过去的swz文件也需注意,它是类似于ABD49354324081CEBB8F60184CF5FEE81F0F9298.swz 这样的名字。似乎是截取自于该文件的数字签名。


    >>为了使用RSL,我们要做些什么?FlashPlayer又会为我们做些什么?

    Adobe数字签名的RSL(*.swz)文件必须由我们编写代码来下载。  --------  对于Flex而言,SystemManager负责启动RSL(*.swz)的下载。

    下载完毕之后,我们不需要编写任何代码,FlashPlayer会自动把它们存放到FlashPlayer指定的缓存当中。


    >>如何验证?

    首先清空上述FlashPlayer缓存。

    然后,通过FlashBuilder我们建立ActionScript工程:TestRslSave

    然后,把 framework_4.6.0.23201.swz 文件手工放置在Debug-Bin目录下。

    最后编译并执行下面的程序,看FlashPlayer缓存,你会发现多了三个文件。

    (1)。ABD49354324081CEBB8F60184CF5FEE81F0F9298.swz   ----  它就是framework_4.6.0.23201.swz

    (2)。ABD49354324081CEBB8F60184CF5FEE81F0F9298.heu

    (3)。cacheSize.txt

    下面的代码没有文件的磁盘读些操作,因此可以认定:swz文件是FlashPlayer帮我们放入其缓存的。


    TestRslSave.as

    注意:下载Adobe数字签名的swz文件的时候,myURLReq.digest必须设定

    1. package
    2. {
    3.         import flash.display.Sprite;
    4.         import flash.events.Event;
    5.         import flash.events.IOErrorEvent;
    6.         import flash.net.URLLoader;
    7.         import flash.net.URLRequest;
    8.         import flash.text.TextField;
    9.        
    10.         public class TestRslSave extends Sprite
    11.         {
    12.                 private var txt1:TextField;

    13.                 public function TestRslSave()
    14.                 {
    15.                         txt1 = new TextField();
    16.                         addChild(txt1);
    17.                        
    18.                         var myURLReq:URLRequest = new URLRequest();
    19.                         myURLReq.url = "framework_4.6.0.23201.swz";
    20.                         myURLReq.digest = "abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437";

    21.                         var myURLLoader:URLLoader = new URLLoader();
    22.                         myURLLoader.addEventListener(Event.COMPLETE, onComplete);
    23.                         myURLLoader.addEventListener(IOErrorEvent.IO_ERROR, onErrorHandler);
    24.                        
    25.                         myURLLoader.load(myURLReq);
    26.                 }
    27.                
    28.                 function onComplete(event:Event) {
    29.                         txt1.text="onComplete";
    30.                 }
    31.                
    32.                 function onErrorHandler(event:IOErrorEvent) {
    33.                         txt1.text=event.toString();
    34.                 }
    35.         }
    36. }
    复制代码

    >>必要的解释(1)。myURLReq.digest          首先请参考《ActionScript 3.0 语言和组件参考》中对于URLRequest的成员变量digest的说明。摘要如下:

    digest属性
    digest:String  [读写]
    语言版本: ActionScript 3.0
    运行时版本: AIR 1.0, Flash Player 9.0.115.0
    唯一地标识将存储到 Flash Player 缓存中(或从中检索)的已签名 Adobe 平台组件的字符串。Adobe 平台组件是一个签名文件(SWZ 文件),其中包含永久缓存在用户计算机上的 SWF 内容。Adobe 对所有 SWZ 进行签名。摘要对应于单个缓存文件;如果对该文件进行了任何更改,则其摘要的更改将以不可预知的方式进行。通过使用摘要,您可以跨多个域验证缓存文件。具有相同摘要的两个文件是同一个文件,具有不同摘要的两个文件是不同的文件。实际上无法创建文件来“窃听”摘要以假装是另一个摘要。此属性仅适用于 SWF 内容,不适用于在 AIR 中运行的 JavaScript 代码。摘要基于 SHA-256 消息摘要算法(长度为 64 个字符,采用十六进制格式)。例如,Flex SDK 包括 Flex 框架的 SWZ(而且它为该 SWZ 文件提供了摘要字符串)。可以将此 SWZ 发布到您的 Web 服务器上并加载到 SWF 文件中(使用 URLLoader 对象的 load() 方法)。如果最终用户的计算机已缓存了匹配的 SWZ 文件,则应用程序将使用此缓存的 SWZ 文件。(SWZ 文件在其 digest 与您提供的摘要匹配时匹配。)否则,应用程序将从您指定的 URL 下载 SWZ 文件。仅在 URLLoader.load() 方法调用中使用的 URLRequest 对象中设置 digest 参数即可加载 SWZ 文件。如果 URLRequest 对象的 digest 属性在用于其它方法时进行了设置,则应用程序将引发 IOError 异常。
    (2)。myURLReq.digest = "abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437";这串字符代表framework_4.6.0.23201.swz的数字摘要。上述示例执行过程中,FlashPlayer会“暗地里”计算framework_4.6.0.23201.swz的数字摘要,然后和这串字符作比较。如果不同,则报错。我们的示例程序是如何预先得知这个字符串的呢?任意为某个Flex工程增加编译参数: keep-generated-actionscript=true则编译该工程后,会出现文件夹generated。在其中找到名字类似于_XXXXXXX_mx_managers_SystemManager-generated.as的代码文件。察看代码可以找到类似于下面的内容,你发现了什么?
    1. [new RSLData("http://fpdownload.adobe.com/pub/swz/flex/4.6.0.23201/framework_4.6.0.23201.swz",
    2. "http://fpdownload.adobe.com/pub/swz/crossdomain.xml",
    3. "<strong><span style="color:#ff0000;">abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437</span></strong>",
    4. "SHA-256",true,true,"default"),
    5. new RSLData("framework_4.6.0.23201.swz",
    6. "",
    7. "abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437",
    8. "SHA-256",true,true,"default")],
    复制代码
    >>引申思考:是谁把非数字签名的RSL放入了浏览器缓存?      


    本文来自:http://blog.csdn.net/tiangej/article/details/7423911


    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52619
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2015-5-7 11:14:37 | 显示全部楼层

    2012年,Adobe把FlexSDK贡献给开源社区的同时,公布了未来Flash运行时路线图。

    http://bbs.9ria.com/thread-112747-1-6.html

    http://www.7yue.com/upload/flash-runtimes-roadmap.pdf


    内容之一是取消Adobe数字签名的RSL。

    既然FlexSDK和Adobe没有直接的关系了,自然继续用Adobe对RSL进行数字签名是不妥当的。


    数字签名的RSL一定程度上弥补了Flex程序体积大的不足,是很必要的功能。

    今后数字签名的RSL是否存在,完全取决于FlashPlayer是否支持该功能。

    FlashPlayer该信任谁的数字签名?

    如果没有可信任的人或机构,FlashPlayer就不会支持数字签名的RSL。


    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 1 反对 0

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2024-3-29 04:16 , Processed in 0.049149 second(s), 31 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表