私は最近、Apple 製品 (iPhone 構成ユーティリティ) の Java でのモックアップを担当しています。私が少し行き詰まっているセクションの 1 つは、Exchange ActiveSync に関する部分です。そこで、キーチェーンから証明書を選択して、EAS アカウントの資格情報として使用できます。調査の結果、実際には PKCS12 キーストアを作成し、選択した証明書の秘密鍵を挿入し、それを XML にエンコードしていることがわかりました。これまでのところ大したことではありません。キーチェーン アクセスで .p12 ファイルを作成すると、問題なくアップロードされます。しかし、それをJavaに持ち込もうとすると問題が発生します。
以前に .p12 ファイルで使用した証明書の 1 つを .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ファイルからJavaのPKCS12キーストアに取得する方法を知っている人はいますか? 私は正しい軌道に乗っていますか?
前もって感謝します!