我最近已經負責用Java模擬Apple產品(iPhone配置實用程序)。我一直堅持的一個部分是關於Exchange ActiveSync的一部分。在那裏,它允許您從鑰匙串中選擇一個證書作爲EAS帳戶的憑證。經過一番研究,我發現它實際上是在創建一個PKCS12密鑰庫,插入我選擇的證書的私鑰並將其編碼爲XML。到目前爲止沒有什麼大不了的。如果我使用Keychain Access創建了一個.p12文件,它可以毫無問題地上傳。但是當我嘗試將它帶入Java時,我遇到了一個問題。來自CA的PKCS12 Java Keystore和來自java的用戶證書
假設我將之前使用過的證書作爲.cer文件導出(這是我們期望在環境中獲得的)。現在,當我把它上傳到Java,我得到一個證書對象如下...
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"));
但是當我嘗試...
ks.setCertificateEntry("SomeAlias", userCert);
我得到的異常...
java.security.KeyStoreException: TrustedCertEntry not supported
所以從證書我移動到鍵。但是憑藉這些證書(我也獲得了CA證書),我只能訪問公鑰,而不是私鑰。如果我嘗試添加公鑰是這樣的...
java.security.cert.Certificate[] chain = {CACert};
ks.setKeyEntry("SomeAlias", userCert.getPublicKey().getEncoded(), chain);
我得到...
java.security.KeyStoreException: Private key is not stored as PKCS#8 EncryptedPrivateKeyInfo: java.io.IOException: DerValue.getOctetString, not an Octet String: 3
所以,現在我在這裏。有沒有人有任何想法如何從.cer文件獲取私鑰到Java中的PKCS12密鑰庫?我是否在正確的軌道上?
在此先感謝!
+1,非常徹底! – 2010-09-01 11:53:31
現貨。謝謝(你的)信息! – Staros 2010-09-01 14:13:58