火狐浏览器插件(XPI 文件)签名指南
Symantec,Thawte,GlobalSign 签发的代码签名证书都可以签名火狐浏览器插件(XPI)文件。如果您还没有代码签名证书,请联系易维信(EVTrust)购买火狐代码签名证书。
第 1 步:下载有关签名工具
请先到 Mozilla FTP 网站下载最新的网络安全服务包 (Network Security Services ,简称: NSS) : ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/ ,对于 Windows 操作系统,NSS 包:nss-3.9.zip 的存放目录为: NSS_3_9_RTM/WINNT5.0_OPT.OBJ/ ,并解包到目录: c:\foxsign\nss-3.9\ ;
还需要下载最新的 Netscape Portable Runtime 包 ( 简称: NSPR) : http://ftp.mozilla.org/pub/mozilla.org/nspr/releases/ ,对于 Windows 操作系统, NSPR 包: nspr-4.6.zip 的存放目录为: v4.6/WINNT5.0_OPT.OBJ/ ,并解包到目录: c:\foxsign\ nspr-4.6\ ;
您还需要有压缩软件,推荐用 WinRAR ,并把 c:\foxsign\nss-3.9\bin\;c:\foxsign\nss-3.9\lib\; c:\foxsign\nspr-4.6\lib\;C:\Program Files\WinRAR 等目录添加系统路径上,以便 DOS 方式下能正常使用以上签名工具。
第 2 步:创建证书存储库文件
在 DOS 方式下输入以下命令,请不要漏了 -d 后面的“ . ”:
c:\foxsign> certutil -N -d .
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.
Enter new password:
Re-enter password:
输入密钥管理密码后 (请记牢,以后签名时要用到),会在该目录下生成 3 个证书存储库文件: cert8.db 、 key3.db 和 secmod.db 。
第 3 步:导入PFX格式的代码签名证书到证书存储库
您已经申请了Symantec代码签名证书,并已经得到 PFX 格式的证书文件;请在 DOS 方式下输入以下命令,请不要漏了 -d 后面的“ . ”:
c:\foxsign> pk12util -i mycs.pfx -d .
Enter Password or Pin for "NSS Certificate DB":
Enter password for PKCS12 file:
pk12util: PKCS12 IMPORT SUCCESSFUL
先输入您在第 2 步设置的证书存储库管理密码,再输入您在导出 PFX 证书时设置的密码即可,会提示“ PKCS12 IMPORT SUCCESSFUL(PKCS12 格式证书导入成功 ) ” (PKCS12 格式就是 PFX 格式 ) 。
第 4步:导入根证书和中级根证书,并检查证书是否正常导入
PFX 格式证书中本身已经含有证书颁发者的根证书和中级根证书,但由于 NSS 签名工具Signtool 不支持证书链 (Mozilla 承认这是一个 Bug),您需要联系易维信(EVTrust)获取rootCA.cer,subCA.cer文件,并保存工作目录下,如: c:\foxsign\rootCA.cer 和 c:\foxsign\subCA.cer 。并在 DOS 方式下输入以下命令,请不要漏了 -d 后面的“ . ”:
c:\foxsign> certutil -A -n " Root CA " -t "TC,TC,TC" -d . -i "rootCA.cer"
c:\foxsign> certutil -A -n " Sub CA " -t "c,c,C" -d . -i "subCA.cer"
并输入以下命令检查根证书和代码签名证书是否成功导入证书存储库中:
c:\foxsign> certutil -L -d .
22689013c 2abed23ee 6c 9a 95410b4_7dc62150 -9c 81-4ee5-8d03-1b 67c 2ba1fc2 u,u,u
WoSign Code Signing Authority - The USERTRUST Network C,C,C
UTN - USERFirst-Object CT ,C,C
如果显示以上信息,就表明证书导入成功,请注意第 1 行一直到“ u,u,u ”之前的一长串字符,这是系统自动分配的您的代码签名证书的证书别名 (alias) ,后面签名时会用到。
第 5 步:数字签名火狐插件XPI文件
本签名指南使用 Mozilla 网站上的一个插件 (Adblock Plus),原插件是没有签名的 ( 参见后面附图 ) ,在 c:\foxsign 目录下新建一个 signed 目录,再把 XPI 文件解包后的文件拷到此目录下,并在 DOS 方式下输入以下命令,请不要漏了 -d 后面的“ . ”,命令中的 alias 复制上一步看到的证书别名,如: 22689013c 2abed23ee 6c 9a 95410b4_7dc62150 -9c 81-4ee5-8d03-1b 67c 2ba1fc2 ,而命令中的 password 就是证书存储库管理密码:
c:\foxsign> signtool -d . -k alias -p password signed/
using certificate directory: .
Generating signed/META-INF/manifest.mf file..
--> chrome/adblockplus.jar
--> chrome.manifest
--> components/nsAdblockPlus.js
--> components/nsAdblockPlus.xpt
--> defaults/preferences/adblockplus.js
--> install.js
--> install.rdf
Generating zigbert.sf file.
tree "signed/" signed successfully
从最后一行可以看出:已经签名成功!会在 signed/ 目录下生成一个 META-INF 子目录,此目录中有 3 个文件: zigbert.rsa 、 manifest.mf 和 zigbert.sf ,请注意:文件 zigbert.rsa 含有签名信息,签名后不得修改和删除 signed/ 目录下的所有文件,否则会提示签名验证失败而无法安装 。
第6步:重新打包为XPI文件
把 signed/ 目录下的文件使用压缩工具打包成 zip 文件,推荐使用 WinRAR ,并使用 DOS 方式打包,因为 XPI 签名要求打包文件中的第一个文件是含有签名信息的 zigbert.rsa ,否则无法正常验证签名,而一般的压缩软件是按照字母顺序排列文件的。所以,必须先做一个指定压缩顺序的列表文件 list.txt ,如本例:
META-INF\zigbert.rsa
META-INF\manifest.mf
META-INF\zigbert.sf
chrome\adblockplus.jar
chrome.manifest
install.rdf
install.js
components\nsAdblockPlus.js
components\nsAdblockPlus.xpt
defaults\preferences\adblockplus.js
再在 DOS 方式下输入: c:\foxsign> winrar a test.zip @list.txt 然后把.zip 文件改名为 .xpi 文件即可: c:\foxsign> ren test.zip test.xpi 这样,完成了XPI文件的签名,可以放到网上供用户下载安装了!
第7步:测试和演示已经签名的XPI插件
本指南的签名过程使用了 Mozilla 网站上的一个插件 (Adblock Plus),原插件是没有签名的,在火狐浏览器中点击运行时会显示“未签名”,如图1所示:

使用火狐浏览器运行 Google 为火狐浏览器定制的 搜索工条插件,会显示软件发行者名称为: Google Inc.( http://dl.google.com/firefox/google-toolbar-win.xpi ) ,如图2所示:

火狐浏览器插件(XPI 文件)签名指南的更多相关文章
- FireFox 插件xpi文件签名2
		
上一篇https://www.cnblogs.com/nightnine/p/6140676.html 提交到官方网站上的签名,官方已经拒绝了 于是手动自己签名 官方文档:https://develo ...
 - php开发工具之火狐浏览器插件
		
相信做开发的都有一种火狐情怀吧! 下面来介绍下一些自己在php开发工程中用到几个火狐浏览器插件. 1.[firebug]: 这个插件可以说是一个神奇,功能不用过对介绍. 2.[hostAdmin]: ...
 - windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点(转)
		
windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点 平时需要查阅一些技术资料,光走VPN太浪费流量,所以这儿教大家一种使用火狐浏览器的插件 AutoPr ...
 - 解决 Firefox 火狐浏览器下载 .exe 文件卡住的问题 以及关闭测试版cache2
		
解决 Firefox 火狐浏览器下载 .exe 文件卡住的问题 在firefox浏览器地址栏里输入:about:config 点“我保证会小心”,显示firefox的高级配置列表 在配置页面的搜索框里 ...
 - 火狐浏览器插件Modify Headers伪造IP地址
		
安装插件:先打开火狐浏览器 => 找到下载好的 modify_headers.xpi 插件文件 => 鼠标按住插件文件不放,拖拽到火狐浏览器界面 => 按提示重启浏览器 => ...
 - 在NPAPI开发火狐浏览器插件在NPAPI插件
		
1.插件是什么 插件是一种遵循一定规范的应用程序接口编写出来的程序.插件必须依附于一个宿主程序,为宿主程序提供增强功能.插件的种类有很多,这里主要讨论浏览器插件. IE下利用OLE和COM技术开发的浏 ...
 - 火狐浏览器打开html文件,中文乱码
		
当html文件为: 解决方法: 将 <meta http-equiv="Content-Type" content="text/html; charset=UT ...
 - 火狐浏览器插件--xpath利器
		
以前在做web自动化的时候,免不了要找定位啊什么的.一层层找下来太痛苦了,时间也浪费了一天写不了啥.特别是在最开始接触自动化的时候,我们系统坑爹的只支持IE.后来换公司了,在偶然情况下,得知了fire ...
 - 火狐浏览器安装 Modify Headers 插件
		
一.火狐浏览器插件安装 这里以火狐浏览器的Modify Headers插件安装为例,展示火狐插件的安装: 1.打开火狐浏览器,右上角选择“附加组件” 2.搜索Modify Headers插件 3.安装 ...
 
随机推荐
- go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径
			
Go 环境变量 Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们.如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go ...
 - PCB Winform中的WebBrowser扩展拖放(拖拽)功能 实现方法
			
我们在Winform支持网页通常增加WebBrowser控件实现,相当于内嵌浏览器浏览网页使用, 而此WebBrowser默认情况是文件拖入功能是不支持的, 如何才能支持呢.在这里介绍如何实现方法 一 ...
 - codevs1369 xth 砍树(线段树)
			
1369 xth 砍树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个凉爽的夏夜,xth 和 rabbi ...
 - 洛谷P2668斗地主(搜索)noip2015
			
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
 - MyBatis Generator实现MySQL分页插件
			
MyBatis Generator是一个非常方便的代码生成工具,它能够根据表结构生成CRUD代码,可以满足大部分需求.但是唯一让人不爽的是,生成的代码中的数据库查询没有分页功能.本文介绍如何让MyBa ...
 - Sorting It All Out       拓扑排序+确定点
			
这一道题的话 数据有一点问题 ........ 例如 不过 还是 能理解一下 试试吧 ......... A<B B<C C<A A<C B<A ...
 - Codeforces Round 411 Div.2 题解
			
A Fake NP standard input/output s, MB Submit Add to favourites x3673 B -palindrome standard input/ou ...
 - ACM_哥德巴赫猜想(素数筛)
			
哥德巴赫猜想 Time Limit: 2000/1000ms (Java/Others) Problem Description: 哥德巴赫猜想大概是这么一回事:“偶数(>=4) == 两个质数 ...
 - Java 中  父类变量访问子类方法 需要使用 类型转换 (instenceof)关键字   /类型判断/
			
通过数组元素访问方法的时候只能访问在 Animal中定义的方法,对 于 Tiger类和 Fish中定义的方法时却不能调用,例如语句 animal[2].swim();就是不正确的.当 需要访问这些 ...
 - Contact
			
UF3000: 1.wafer进去prober后,默认probercard不会跟chuck上的wafer接触. 2.通过prober界面上的按钮向上移动,使得prober card和wafer的距离为 ...