【问题标题】:Reading a PFX file PrivateKey and Certificate Chain in java - Getting a Null在 java 中读取 PFX 文件 PrivateKey 和证书链 - 获取 Null
【发布时间】:2014-04-15 06:31:57
【问题描述】:

我的代码如下:

public static void main(String[] args) throws IOException, GeneralSecurityException, DocumentException {
    String path = "<pfx file>";
    char[] pass = "<password>".toCharArray();

    BouncyCastleProvider provider = new BouncyCastleProvider();
    Security.addProvider(provider);
    KeyStore ks = KeyStore.getInstance("pkcs12", provider.getName());
    ks.load(new FileInputStream(path), pass);
    String alias = (String) ks.aliases().nextElement(); /* alias='CCA India 2011\u0000'*/
    PrivateKey pk = (PrivateKey) ks.getKey(alias, pass);/* returns null */
    Certificate[] chain = ks.getCertificateChain(alias);/* returns null */
    X509Certificate last = (X509Certificate) chain[chain.length - 1];
    System.out.println(last.getNotBefore());
    System.out.println(last.getNotAfter());
}

返回的别名末尾有一个 \u0000。我不知道该怎么做。这就是 pk 和 chain 为空的原因吗?我试图修剪别名无济于事。

我可以将此证书导入微软密钥库。这意味着我可以在 Internet Explorer .. 证书中看到它。我可以用它在 Adob​​e Reader 上签署文件。所以pfx文件没有问题。只是无法在 java 中使用它。

我也安装了 JCE。

【问题讨论】:

    标签: java bouncycastle pfx


    【解决方案1】:

    我很确定别名是您的问题。我们在大小写字母方面也有类似的问题。有些提供者区分大小写(例如我认为是 BC),有些则不是(我认为是 sun 提供者),我不确定它们是否支持特殊字符。

    您是否尝试过 Sun“SunJSSE”提供程序?如果您不指定 BC 并且他支持 PKCS#12,则应默认使用它。我认为提供者在别名方面也比 bc 稍微宽松一些。如果没有任何帮助,我会尝试更改条目的别名,如果某些微软工具支持此别名,也许他们可以这样做。

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多