我正在尝试解密S/MIME电子邮件(最初通过Outlook发送),为此,我正在使用bouncycastle API.不过,我遇到了麻烦.
我在Windows证书存储区中拥有收件人的证书.我之前用它将签名和加密的电子邮件发送给另一方,然后他们用它向我发送加密回复.然后我将证书(带私钥)导出为.pfx文件,然后将此pfx文件加载到Java KeyStore中.但是,它不起作用,我怀疑这是因为主题密钥标识符不匹配.
这是我用来从KeyStore获取主题密钥id的代码:
KeyStore ks = KeyStore.getInstance("PKCS12");
char[] pw = "password".toCharArray();
ks.load(new FileInputStream("d:\\cert_priv_key.pfx"), pw);
Enumeration en = ks.aliases();
while( en.hasMoreElements() )
{
String alias = (String)en.nextElement();
System.out.println(alias);
if( ks.isKeyEntry(alias) )
{
Certificate[] chain = ks.getCertificateChain(alias);
X509Certificate cert = (X509Certificate)chain[0];
byte[] id = cert.getExtensionValue("2.5.29.14");
System.out.println(" " + toHex(id));
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印出以下密钥标识符:
04 16 04 14 88 ed bb 7c 64 7b 41 63 48 0a 24 40 2b 3c d0 78 72 3c 30 b3
Run Code Online (Sandbox Code Playgroud)
但是,当我检查Windows证书存储区时,密钥标识符是不同的:
88 ed bb …Run Code Online (Sandbox Code Playgroud)