如何使用.pfx文件对java小程序进行签名?

如何使用.pfx文件对java小程序进行签名?,java,applet,certificate,signing,Java,Applet,Certificate,Signing,我正试图使用本指南与我们公司签署jar小程序存档。pfx证书 (互联网上几乎没有其他人): 一切似乎都很好,但当我尝试通过浏览器运行apple时,我看到了 “发布者”未知(不受信任)。当我谈到细节时,我能看到合适的公司 名称和证书供应商(GlobalSign)。为什么它没有正确显示为已知/受信任 在我看来,有一件事是可疑的,那就是命令的输出 jarsigner-verify-verbose-certs Applet.jar: (...) sm 1936 Wed Apr 13

我正试图使用本指南与我们公司签署jar小程序存档。pfx证书
(互联网上几乎没有其他人):

一切似乎都很好,但当我尝试通过浏览器运行apple时,我看到了
“发布者”未知(不受信任)。当我谈到细节时,我能看到合适的公司
名称和证书供应商(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

根据您的帖子,签名证书链中似乎只有一个证书。我验证了我签名的小程序(此小程序在浏览器中正常工作)

我们可以看到,链中有2个证书,因为我的签名证书是由Thawte代码签名CA颁发的

在您的情况下,如果在
jarsigner
输出中只有一个证书,则可能表明缺少中间CA,我毫不怀疑GlobalSign直接从根CA(位于java信任存储中)颁发证书。因此,当加载小程序并验证签名时,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@home:~/]$keytool-list-v-storetype pkcs12-keystore myfile.pfx
输入密钥库密码:
密钥库类型:PKCS12
密钥库提供程序:SunJSSE
您的密钥库包含1个条目
别名:2
创建日期:2010年8月4日
条目类型:PrivateKeyEntry

证书链长度:2非常感谢大家,特别是Jcs:)
我最终发现.pfx文件导入不正确。
我让老板从头开始为我导入它,包括所有可能的路径/链/证书,现在它可以工作了:)
因此,如果有人遇到类似问题,我的建议是再次尝试获取/导入证书

-证书本身的问题比签名方法的问题更大。

下载指南时不会感到麻烦,但您是否创建了“pfx”(我从未听说过)证书?。pfx是PKCS#12文件的一种,与示例.p12相同。这个.pfx文件是我从其他项目(c++)中得到的,它可以正常工作。这并不能回答我的问题,我将重复。。“您是否创建了‘pfx’……证书?”不,我不是自己创建的pfx证书。我们直接从GlobalSign获得的*.pfx文件。是的,您应该向pfx文件中添加两个证书:GlobalSign ObjectSign CA()和GlobalSign Primary Object Publishing CA()。后者由GlobalSign根CA签名(无需包含)
[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]:
(...)