Я недавно был назначен ответственным за макетирование продукта Apple (утилиты конфигурирования iPhone) на Java.Один из разделов, на котором я немного застрял, - это часть об 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?Я даже на правильном пути?
Заранее спасибо!