【问题标题】:How to sign java applet with .pfx file?如何使用 .pfx 文件签署 java 小程序?
【发布时间】:2011-08-04 07:27:57
【问题描述】:

我正在尝试使用本指南使用我们公司的 .pfx 证书签署 jar 小程序存档
(以及一些来自互联网的其他人):
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?

【问题讨论】:

  • 无法下载指南,但您是否创建了“pfx”(我从未听说过)证书?
  • .pfx 是一种 PKCS #12 文件,例如 .p12。这个 .pfx 文件是我从其他项目(c++)中得到的,它可以正常工作。
  • 这没有回答我的问题,我将重复一遍。“您是否创建 'pfx' ...证书?”
  • 不,我没有自己创建 pfx 证书。我们直接从 GlobalSign 获得的 *.pfx 文件。
  • 是的,您应该在 PFX 文件中添加 2 个证书:GlobalSign ObjectSign CA (secure.globalsign.net/cacert/ObjectSign.crt) 和 GlobalSign Primary Object Publishing CA (secure.globalsign.net/cacert/PrimObject.crt)。后者由 GlobalSign 根 CA 签名(不必包括在内)

标签: java applet certificate signing


【解决方案1】:

非常感谢大家,尤其是 Jcs :)
我终于发现 .pfx 文件只是导入不正确。
我让我的老板从头开始为我导入它,包括所有可能的路径/链/证书,现在它可以工作了 :)
因此,如果有人遇到类似问题,我的建议是再次尝试获取/导入证书
- 这是证书本身的问题,而不是签名方法。

【讨论】:

    【解决方案2】:

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

    (...)
    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]
    
    (...)
    

    我们可以看到链中有 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]:
    (...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 2014-08-26
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多