PKCS12 Java Хранилище ключей от центра сертификации и сертификат пользователя на java

Недавно мне поручили создать макет продукта Apple (утилита настройки iPhone) на Java. Один из разделов I ' Я немного застрял в этой части Exchange ActiveSync. Там он позволяет вам выбрать сертификат из вашей Связки ключей для использования в качестве учетных данных для вашей учетной записи EAS. После некоторого исследования я обнаружил, что он фактически создает хранилище ключей PKCS12, вставляя закрытый ключ выбранного мной сертификата и кодируя его в XML. Пока ничего страшного. Если я создаю файл .p12 с помощью Keychain Access, он загружается без проблем. Но я сталкиваюсь с проблемой, когда пытаюсь перенести это на Java.

Допустим, я экспортирую один из тех сертификатов, которые я использовал ранее с файлом .p12, как файл .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"));

Но когда я пытаюсь ...

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 в хранилище ключей PKCS12 на Java? Я вообще на правильном пути?

Заранее спасибо!

13
задан Staros 1 September 2010 в 00:33
поделиться