Java/Bouncycastle: Wie erstelle ich einen P12-Keystore mit pkcs5PBES2?Java

Java-Forum
Anonymous
 Java/Bouncycastle: Wie erstelle ich einen P12-Keystore mit pkcs5PBES2?

Post by Anonymous »

Mit der kommenden OpenSSL-Version 3.0 wird die Unterstützung für schwache Krypto in PKCS#12-Dateien entfernt. Also .p12-Dateien, die mit dem Bouncycastle-Anbieter generiert wurden und normalerweise diese Kryptografie haben:

Code: Select all

$ openssl pkcs12 -in bc_legacy.p12 -info -noout
...
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 51200
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 51200
kann dann nicht mehr mit OpenSSL verwendet werden. Die offensichtliche Problemumgehung in Java besteht darin, zum SUN-Anbieter zu wechseln, der Folgendes erzeugt:

Code: Select all

$ openssl pkcs12 -in sun.p12 -info -noout
...
Shrouded Keybag: PBES2, PBKDF2, AES-256-CBC, Iteration 10000, PRF hmacWithSHA256
PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 10000, PRF hmacWithSHA256
Aber ich frage mich: Kann BC das auch? Dies kann beispielsweise beim Erstellen von Keystores nützlich sein, wenn die Attribute „FriendlyName“ und „LocalKeyID“ genauer gesteuert werden müssen, als dies in der Java-Keystore-API möglich ist. Also hier ist, was ich versucht habe:

Code: Select all

ASN1ObjectIdentifier ENC_ALGORITHM = NISTObjectIdentifiers.id_aes256_CBC;
ASN1ObjectIdentifier MAC_ALGORITHM = PKCSObjectIdentifiers.id_PBES2;
int ITERATION_COUNT = 10_000;
OutputEncryptor keyEncryptor = new JcePKCSPBEOutputEncryptorBuilder(ENC_ALGORITHM)
.setProvider("BC")
.setIterationCount(ITERATION_COUNT)
.build(p12Password.toCharArray());

PKCS12SafeBagBuilder keyBagBuilder = new JcaPKCS12SafeBagBuilder((PrivateKey) privKey, keyEncryptor);
keyBagBuilder.addBagAttribute(PKCS12SafeBag.friendlyNameAttribute, new DERBMPString(alias));

PKCS12SafeBagBuilder certBagBuilder = new JcaPKCS12SafeBagBuilder(cert);
certBagBuilder.addBagAttribute(PKCS12SafeBag.friendlyNameAttribute, new DERBMPString(alias));

PKCS12PfxPduBuilder pfxBuilder = new PKCS12PfxPduBuilder();
pfxBuilder.addEncryptedData(
keyEncryptor,
new PKCS12SafeBag[]{keyBagBuilder.build(), certBagBuilder.build()}
);
JcePKCS12MacCalculatorBuilder macBuilder = new JcePKCS12MacCalculatorBuilder(MAC_ALGORITHM)
.setIterationCount(ITERATION_COUNT)
.setProvider("BC");

PKCS12PfxPdu pfx = pfxBuilder.build(macBuilder, p12Password.toCharArray());
dies schlägt fehl mit

Code: Select all

org.bouncycastle.pkcs.PKCSException: unable to process data: unable to create MAC calculator: no such algorithm: 1.2.840.113549.1.5.13 for provider BC
Bouncycastle bietet zwar einen PKCSObjectIdentifiers.id_hmacWithSHA256-Algorithmus, der jedoch P12-Dateien erzeugt, die weder mit OpenSSL noch mit dem Java-Keytool gelesen werden können. Auf der Diskussionsseite von bouncy Github gibt es dazu eine Frage, aber diese Frage wurde vor fast einem Jahr gestellt und hat noch keine Antworten. Deshalb frage ich hier: Kann BC OpenSSL-3.0-kompatible PKCS#12-Dateien erstellen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post