相关疑难解决方法(0)

来自CA的PKCS12 Java密钥库和java中的用户证书

我最近负责用Java模拟Apple产品(iPhone配置实用程序).我有点坚持的其中一个部分是关于Exchange ActiveSync的一部分.在那里,它允许您从钥匙串中选择一个证书作为您的EAS帐户的凭据.经过一些研究,我发现它实际上创建了一个PKCS12密钥库,插入了我选择的证书的私钥,并将其编码为XML.到目前为止还没什么大不了的.如果我使用Keychain Access创建一个.p12文件,它上传没有问题.但是当我尝试将其转移到Java时,我遇到了一个问题.

假设我将之前用过的.s12文件中的一个证书导出为.cer文件(这是我们期望在环境中获得的).现在当我将它上传到Java时,我得到一个Certificate对象,如下所示......

KeyStore ks = java.security.KeyStore.getInstance("PKCS12");
ks.load(null, "somePassword".toCharArray());

CertificateFactory cf = CertificateFactory.getInstance("X.509", new BouncyCastleProvider());
java.security.cert.Certificate userCert  = cf.generateCertificate(new FileInputStream("/Users/me/Desktop/RecentlyExportedCert.cer"));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试......

ks.setCertificateEntry("SomeAlias", userCert);
Run Code Online (Sandbox Code Playgroud)

我得到例外......

java.security.KeyStoreException: TrustedCertEntry not supported
Run Code Online (Sandbox Code Playgroud)

因此,从证书中我转移到密钥上.但是使用这些证书(我也获得了CA证书),我只能访问公钥,而不是私钥.如果我试图像这样添加公钥...

java.security.cert.Certificate[] chain = {CACert};
ks.setKeyEntry("SomeAlias", userCert.getPublicKey().getEncoded(), chain);
Run Code Online (Sandbox Code Playgroud)

我明白了......

java.security.KeyStoreException: Private key is not stored as PKCS#8 EncryptedPrivateKeyInfo: java.io.IOException: DerValue.getOctetString, not an Octet String: 3
Run Code Online (Sandbox Code Playgroud)

所以现在我在这里.有没有人知道如何从.cer文件中获取私钥到Java中的PKCS12密钥库?我是否走在正确的轨道上?

提前致谢!

java encryption pki pkcs#12 x509certificate

13
推荐指数
1
解决办法
3万
查看次数

标签 统计

encryption ×1

java ×1

pkcs#12 ×1

pki ×1

x509certificate ×1