基本上,您的签名需要包括完整的证书链,直到受信任的 VeriSign 根证书,绕过在 mozilla 中具有未知信任的“VeriSign Class 3 Public Primary Certification Authority - G5”(错误 602107),因为默认情况下该链结束得太快。
您的 XPI 当前使用您的证书进行签名,不包括进一步的证书链,依赖于用户的浏览器将立即信任您的证书的颁发者。您可以使用 Mozilla 的jarsigner
工具检查这一点(请参阅Mozilla NSS 工具):
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
使用 Mozilla 的工具从证书数据库中删除不明确信任的 VeriSing 的内置证书
- 构建您的证书的证书信任链,一直到微软的“Class 3 Public Primary Certification Authority”。
- 签署 xpi(这次完整的证书链将包含在签名中)
jarsigner
如上所述验证 xpi
- 在 Firefox 中测试 xpi - 您不应再看到“作者未验证”。
注意事项:
- 内置 Firefox 证书存储中的信任位实际上是 3 态(受信任、不受信任和未知),尽管在 FF GUI 中仅显示为 2 态复选框(已选中=受信任、未选中=不受信任或未知)。默认情况下 trust is unknown,这使您能够绕过 VeriSign 的证书,如所述。如果您曾经通过 FF 的复选框启用信任,它仍然可以工作,但如果您取消选中信任复选框,则信任将设置为untrusted,这将防止绕过链中的证书。将其重置为初始未知的最简单(唯一?)方法是删除您的 Firefox 配置文件。
- 在 Mozilla 最终启用代码签名信任位后(请参阅上面的错误),如果您想支持旧版本的 Firefox,您仍然需要像这样签名。
希望能帮助到你!