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

我试图使用本指南使用我们公司的.pfx证书签署一个jar applet存档

(以及其他来自互联网的人):

http://www.globalsign.com/support/ordering-guides/SignJavaCodeAppletsPFX.pdf

一切似乎都很好,但是当我尝试通过浏览器运行苹果时,我看到了
‘发布者’是未知的(不可信).当我进入细节时,我能够看到合适的公司
名称和证书供应商(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添加到它?

最佳答案 根据您的帖子,似乎签名证书链中只有一个证书.我验证了我签名的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并验证签名时,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]:
(...)
点赞