这是我的代码如下:
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和链为空的原因吗?我试图修剪别名无济于事。
我可以将此证书导入microsoft密钥库。意思是我能够在Internet Explorer中看到它..证书。我可以用它在Adobe Reader上签名文件。所以pfx文件没有问题。只是不能在java中使用它。
我也安装了JCE。
答案 0 :(得分:0)
我很确定别名是你的问题。我们有大写和小写字母的类似问题。有些提供商区分大小写(例如我认为BC),有些不是(我认为太阳供应商),我不确定它们是否支持特殊字符。
你有没有尝试太阳&#34; SunJSSE&#34;供应商?如果您未指定BC并且他支持PKCS#12,则应默认使用它。我认为提供者在别名方面也比bc略宽。如果没有任何帮助我会尝试更改条目的别名,也许一些微软工具可以做到这一点,如果他们支持这个别名。