3

iOS MDM 用の Web アプリケーションを使用しています。その中で、mobileconfig 内のペイロードは、デバイスに送信する前に暗号化されます。Apple のドキュメントでは、例として次のコードが提供されています。Ruby であり、正常に動作しています。しかし、Java で同じものを実装することはできません。

OpenSSL::PKCS7.encrypt(p7sign.certificates,
payload, OpenSSL::Cipher::Cipher::new("des-ede3-cbc"),
OpenSSL::PKCS7::BINARY)

私が使用したJavaコードは次のとおりです。

     PublicKey publicKey = x509cert.getPublicKey();
    //publinKey is key extracted from iOS device response stream

    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    clearText = payloadContents.getBytes();
    //payloadContents are contents to be encrypyted
    cipherText = cipher.doFinal(clearText);

これを実行した後のエラーは

java.security.InvalidKeyException: このキーをサポートするプロバイダがインストールされていません。 .crypto.Cipher.init(DashoA13*..)

4

1 に答える 1

1

PKCS7.encryptCMSRFCで指定されているEnvelopedDataを生成します。これは単にコンテンツを暗号化するだけではなく、暗号化を含むASN.1データ構造の仕様です。

Javaで同様のものを生成または復号化するには、ジョブにBouncy Castleを使用することをお勧めします。関連するクラスのJavadocは、ここにあります。CMSEnvelopedDataとその仲間に特に注意してください。

Ruby呼び出しで渡した証明書は、RecipientInfo構造を作成するために使用されます。これは、CMSEnvelopedDataGeneratorクラスを使用して同様のことが可能です。

于 2012-05-31T15:39:30.557 に答える