如何用.pfx文件签名java applet?

我试图使用本指南使用我们公司的.pfx证书签署一个jar applet存档
(以及其他来自互联网的人):
http://www.globalsign.com/support/ordering-guides/SignJavaCodeAppletsPFX.pdf

一切似乎都很好,但当我尝试通过浏览器运行苹果时,我看到了
‘Publisher’是UNKNOWN(不受信任)。 当我进入细节时,我能够看到合适的公司
名称和证书供应商(GlobalSign)。 为什么它没有正确显示为已知/可信?

对我来说可疑的一件事是输出命令
jarsigner -verify -verbose -certs Applet.jar:

(...) sm 1936 Wed Apr 13 03:00:50 CEST 2011 org/my/Applet.class X.509, CN=CompanyName, O=CompanyName, L=Tilst, ST=ProperState, C=DK [certificate is valid from 18.02.10 14:58 to 18.02.13 14:58] s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope 

看起来像’k =在密钥库中找到至少一个证书’缺失了
(应该是smk,它是sm)。 它仅部分签名吗? 或者是什么?

GlobalSign给我的.pfx文件是否有可能是错误的
还不足以签署小程序? 对于普通的可执行文件,它工作得很好……

有任何想法吗? ;)

编辑

@Jcs

看起来你是完全正确的。 我用keytool检查了我的PFX文件,得到:

 Your keystore contains 1 entry Alias name: company_alias Creation date: Apr 13, 2011 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: 

所以看起来链条不完整。
我不确定它是否重要,但也有一些扩展,例如:

 #1: ObjectId: (some_numbers_here) Criticality=true KeyUsage [ DigitalSignature ] #2: ObjectId: (some_numbers_here) Criticality=false AuthorityInfoAccess [ [ accessMethod: (some_numbers_here) accessLocation: URIName: http://secure.globalsign.net/cacert/ObjectSign.crt] ] (...) 

问题是:我的PFX文件是完全错误的,还是以某种方式我需要将globalsign root添加到它?

根据您的post,似乎签名证书链中只有一个证书。 我validation了我签名的applet(这个applet在浏览器中正常工作)

 (...) sm 2419 Thu Mar 31 15:49:14 CEST 2011 org/xml/sax/helpers/XMLReaderFactory.class X.509, CN=Company Name, O=Company Name, L=Paris, ST=Ile de France, C=FR [certificate is valid from 8/4/10 2:00 AM to 8/4/12 1:59 AM] X.509, CN=Thawte Code Signing CA - G2, O="Thawte, Inc.", C=US [certificate is valid from 2/8/10 1:00 AM to 2/8/20 12:59 AM] [KeyUsage extension does not support code signing] (...) 

我们可以看到,由于我的签名证书已由Thawte Code Signing CA颁发,因此链中有2个证书。

在您的情况下,如果jarsigner输出中只有一个证书,则可能表明中间CA丢失,我几乎不怀疑GlobalSign是直接从根CA(在Java信任库中)颁发证书。 因此,当加载applet并validation签名时,JVM无法在签名证书和GlobalSign根CA之间重建证书链,从而解释当前行为。

也许PKF文件不包含该中间CA. 使用OpenSSL您可以检查存在多少证书:

 [jcs@home:~/]$ openssl pkcs12 -in myfile.pfx 

或者使用keytool

 [jcs@home:~/]$ keytool -list -v -storetype pkcs12 -keystore myfile.pfx Enter keystore password: Keystore type: PKCS12 Keystore provider: SunJSSE Your keystore contains 1 entry Alias name: 2 Creation date: Aug 4, 2010 Entry type: PrivateKeyEntry Certificate chain length: 2 <-- the chain length is here. Certificate[1]: (...) 

非常感谢所有人,特别是Jcs 🙂
我终于发现.pfx文件刚刚导入不正确。
我让我的老板从头开始为我导入它包含所有可能的路径/链/证书,现在它可以工作:)
因此,如果有人有类似的问题,我的建议是再次尝试获取/导入证书
– 证书本身比使用签名方法更有问题。