我使用Firebreath创建了一个Firefox插件,一个Win32原生代码DLL。我正在使用Windows 7 / x64,仅针对Windows。该插件本身运行良好,但我真的很难得到正确签名的XPI。如果我没有签署我的XPI,它将被FF 3.6至10(beta)接受并安装。当然,在安装过程中,它会将发布者列为(作者未经过验证)。所以,我花了一个星期调试签名过程......但FF 9和10仍然说(作者未经过验证)! FF 3.6拒绝签名的XPI无效。
如何解决此问题?
重复一遍:我签署了没有错误的xpi,并且生成的XPI在FF 9和10上成功安装,但FF仍然说(作者未经过验证)。
这是我用来签署XPI的批处理代码:
echo * clean out old signing folder and xpi
if exist package rmdir /S /Q package
if exist %package%.xpi del %package%.xpi
echo * copy in files for package
md package
xcopy ..\*.rdf package
md package\plugins
xcopy ..\build\bin\Plugin\Debug\*.dll package\plugins
echo * clean out certificate database
del *.db
echo * import our signing certificate
pk12util -d . -i %keyfile% -K %pwd% -w keypass.txt
echo * adjust trust on base, intermediate and root cert
certutil -M -d . -n "VeriSign" -t "c,c,C"
certutil -M -d . -n "VeriSign Class 3 Code Signing 2010 CA - VeriSign, Inc." -t "TC,TC,TC"
certutil -M -d . -n "%certname%" -t "u,u,Cu"
certutil -L -d .
echo * create signed package
signtool -d . -X -Z %package%.xpi -k "%certname%" -p %pwd% package
答案 0 :(得分:3)
我为Mozilla工作,但这不是一个权威的答案,只是我收集的问题:
因此,基本上,每个证书颁发机构都有三个信任位Mozilla可能会授予它:他们可能信任它来签署网站,和/或邮件和/或代码。您的证书来自Mozilla不信任签署代码的证书颁发机构。 (这就是为什么在您的偏好设置中手动设置该位使其适用于您。)
我被告知很少有人尝试在xpi中使用二进制代码,因为Mozilla并没有真正有条理地找出哪些权限可用于什么。但是,您可以查看此列表:查看“代码信任位”:
https://spreadsheets.google.com/pub?key=ttwCVzDVuWzZYaDosdU6e3w&single=true&gid=0&output=html
例如(完全随机选取),ComSign Secured CA设置了“网站”和“代码”信任位。
我认为Mozilla公开讨论了授予每个CA的权利,并定期重新评估每个CA:
https://wiki.mozilla.org/CA:Schedule#Queue_for_Public_Discussion
答案 1 :(得分:2)
基本上,您的签名需要包含完整的证书链,直至受信任的VeriSign根证书,绕过具有未知信任的“VeriSign Class 3公共主要证书颁发机构 - G5”(默认为bug 602107)链条结束太快了。
您的XPI目前已使用您的证书进行签名,不再包含证书链,依赖于用户的浏览器会立即信任您的证书颁发者。您可以使用Mozilla的jarsigner
工具(请参阅Mozilla NSS tools):
Tools\nss-3.11>jarsigner -verify -verbose -certs my-old.xpi
2057 Thu Sep 15 15:17:44 CEST 2011 META-INF/zigbert.rsa
sm 87 Thu Sep 15 15:17:44 CEST 2011 chrome.manifest
X.509, CN=Company Name inc., OU=General, OU=Digital ID Class 3 - Microsoft Software Validation v2, O=Company Name inc., L=City, ST=State, C=XX
[certificate will expire on 26.4.13 0:59]
(仅显示第一个文件的输出)
您需要包含更多证书才能完成证书,该证书默认在最终用户的浏览器中明确受信任。最后它应该是这样的:
jarsigner -verify -verbose -certs my-newly-signed.xpi
2057 Thu Sep 15 15:17:44 CEST 2011 META-INF/zigbert.rsa
sm 87 Thu Sep 15 15:17:44 CEST 2011 chrome.manifest
X.509, CN=Company Name inc., OU=General, OU=Digital ID Class 3 - Microsoft Software Validation v2, O=Company Name inc., L=City, ST=State, C=XX
[certificate will expire on 26.4.13 0:59]
X.509, CN=VeriSign Class 3 Code Signing 2010 CA, OU=Terms of use at https://www.verisign.com/rpa (c)10, OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
[certificate is valid from 8.2.10 1:00 to 8.2.20 0:59]
[KeyUsage extension does not support code signing]
X.509, CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
[certificate is valid from 8.11.06 1:00 to 8.11.21 0:59]
[KeyUsage extension does not support code signing]
X.509, OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US
[certificate is valid from 23.5.06 19:01 to 23.5.16 19:11]
要实现这一目标,您需要:
certutil
工具jarsigner
验证xpi 警告:
希望它有所帮助!