Wie erstelle ich einen P12-Keystore mit PBES2?Java

Java-Forum
Anonymous
 Wie erstelle ich einen P12-Keystore mit PBES2?

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 Bouncy Castle-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 kann die Hüpfburg das auch? Dies kann beispielsweise beim Erstellen von Keystores nützlich sein, bei denen die Attribute „FriendlyName“ und „LocalKeyID“ genauer gesteuert werden müssen, als dies mit der Java-Keystore-API möglich ist. Folgendes habe ich also versucht:

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
Bouncy Castle bietet zwar einen PKCSObjectIdentifiers.id_hmacWithSHA256-Algorithmus, der jedoch P12-Dateien erzeugt, die nicht mit openSL oder dem Java-Keytool gelesen werden können. Auf der GitHub-Diskussionsseite von Bouncy Castle gibt es dazu eine Frage, aber diese Frage wurde vor fast einem Jahr gestellt und hat noch keine Antworten.
Kann Bouncy Castle OpenSSL-3.0-kompatible PKCS#12-Dateien erstellen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post