在java中读取PFX文件私钥和证书链-获取空值

在java中读取PFX文件私钥和证书链-获取空值,java,bouncycastle,pfx,Java,Bouncycastle,Pfx,以下是我的代码: public static void main(String[] args) throws IOException, GeneralSecurityException, DocumentException { String path = "<pfx file>"; char[] pass = "<password>".toCharArray(); BouncyCastleProvider provider = new Bounc

以下是我的代码:

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());
}
publicstaticvoidmain(String[]args)抛出IOException、GeneralSecurityException、DocumentException{
字符串路径=”;
char[]pass=“.toCharArray()”;
BouncyCastleProvider提供程序=新的BouncyCastleProvider();
Security.addProvider(提供者);
KeyStore ks=KeyStore.getInstance(“pkcs12”,provider.getName());
加载(新文件输入流(路径),通过);
字符串别名=(字符串)ks.alias().nextElement();/*alias='CCA India 2011\u0000'*/
PrivateKey pk=(PrivateKey)ks.getKey(别名,pass);/*返回null*/
证书[]链=ks.getCertificateChain(别名);/*返回null*/
X509Certificate last=(X509Certificate)链[chain.length-1];
System.out.println(last.getNotBefore());
System.out.println(last.getNotAfter());
}
返回的别名末尾有一个\u0000。我不知道该怎么办。这就是pk和chain为空的原因吗?我试图删掉这个别名,但没有用

我可以将此证书导入microsoft密钥库。这意味着我可以在Internet Explorer中看到它。。证书。我可以使用它在Adobe Reader上签署文档。因此,pfx文件没有问题。只是无法在java中使用它


我也安装了JCE。

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

您是否尝试过Sun“SunJSSE”提供商?如果您没有指定BC,并且他支持PKCS#12,则默认情况下应使用该选项。我认为提供商在别名方面也比bc宽松一些。如果没有任何帮助,我会尝试更改条目的别名,如果某些microsoft工具支持此别名,可能可以这样做