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所示: