firefox 扩展更新

firefox扩展更新需要两个文件:install.rdf和update.rdf。前者是在xpi包中的,客户端用这个文件获得更新站点的信息,后者是放在服务器端,客户端每次检查更新的时候会下载这个文件,检查现在可用的版本号,然后下载。

firefox扩展更新有两种方式:http更新和https更新,两者区别在于更新的文件是通过http或是https传输。因为考虑到更新的时候存在中间人攻击(attack in the middle),所以推荐使用https更新,但是如果只需要http更新的话,那么需要给出updateKey来认证服务器的身份。

我还是讨论https更新吧,因为前者没有什么好说的:-) 一个典型的install.rdf和update.rdf如下:

<RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
xmlns:NC=”http://home.netscape.com/NC-rdf#”
xmlns:RDF=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
<RDF:Description RDF:about="rdf:#$mP9ic3"
em:id=”{ec8030f7-c20a-464f-9b0e-13a3a9e97384}”
em:minVersion=”1.5″
em:maxVersion=”3.0.*” />
<RDF:Description RDF:about="urn:mozilla:install-manifest"
em:id=”surf.marvel@lilacbbs.com”
em:name=”SurfLilac”
em:version=”0.0.4″
em:creator=”marvel”
em:contributor=”happygirl”
em:description=”Surf on lilacbbs.com”
em:homepageURL=”http://lilacbbs.com/surflilac/”
em:iconURL=”chrome://surflilac/skin/surflilac.png”
em:updateURL=”http://lilacbbs.com/surflilac/update.rdf”
em:optionsURL=”chrome://surflilac/content/pref/pref-surflilac.xul”
em:updateKey=”MIGfMA0GCSqGSIb3D4GNADCBiQKBgQDbbAD1IyiVmkbMbhSxK60cmGisUzorEvo98+Hs83ZPOYvrMteeYjf2HbnMSobYjjREWTO+DBdS0/HYisubtRXHlZU41ezBhFS00C3J2JiSWyY+HFjRz3vXQSfD5KpkzS2jMGPS0KL4aU9wU/P4Sq4QuhfZJVNVkBejdotr7zsb1wIDAQAB”>

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em=”http://www.mozilla.org/2004/em-rdf#”>

0.0.4

{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
1.5
3.*
http://lilacbbs.com/surflilac/surflilac0.0.4.xpi
sha1:26181045af2614d73ba49bb5fdf8f6cc7188cee0
http://lilacbbs.com/surflilac/changelog/updateinfo0.0.4.html
azl0DkDkELGKSmTs8+FoxOzq+tDpVqILLlO/iG/zP0wduOKrHxxxxxxxxxxxxxxx

首先,install.rdf中的em:updateURL指定了更新文件update.rdf的地址,其次install.rdf的em:updateKey和update.rdf的em:signature指定了升级认证的密钥对。这三个是最重要的,剩下的update.rdf中的RDF:li指定了某一个版本,这里可以有多个RDF:li。

我介绍一下具体怎么操作吧,我们需要mccoy(http://developer.mozilla.org/en/docs/McCoy)这个生成密钥对的工具,步骤如下:
1 用mccoy生成一个密钥,具体步骤参见上面的链接
2 生成install.rdf,文件中含有updateURL
3 用mccoy install步骤2中的install.rdf,你会发现该文件增加了一个updateKey属性,文件格式也变化了,没关系
4 将扩展目录打包成xpi,计算xpi的散列值,例如sha1sum lilac.xpi,记住生成的值
5 生成update.rdf,格式参上。再加入em:updateHash子节点,值为4中散列值,格式参上
6 用mccoy sign步骤5生成的update.rdf,你会发现多了一个em:signature,文件格式也变化了,没关系
7 将xpi文件和update.rdf复制到你的服务器上
8 -EOF-

Leave a Reply

Your email address will not be published. Required fields are marked *