Java/Bouncycastle: как создать хранилище ключей P12 с помощью pkcs5PBES2?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java/Bouncycastle: как создать хранилище ключей P12 с помощью pkcs5PBES2?

Сообщение Anonymous »

В предстоящей версии openssl 3.0 будет удалена поддержка слабого шифрования в файлах PKCS#12. Итак, файлы .p12, созданные с помощью провайдера Bouncycastle, обычно имеют следующую криптографию:

Код: Выделить всё

$ openssl pkcs12 -in bc_legacy.p12 -info -noout
...
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 51200
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 51200
тогда больше нельзя будет использовать с openssl. Очевидным обходным решением в Java является переключение на поставщика SUN, который производит:

Код: Выделить всё

$ 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
Но мне интересно: может ли Британская Колумбия тоже это сделать? Это может быть полезно, например, при создании хранилищ ключей, где атрибуты FriendlyName и localKeyID должны контролироваться более точно, чем это возможно в API хранилища ключей Java. Итак, вот что я попробовал:

Код: Выделить всё

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());
это не работает с

Код: Выделить всё

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 предлагает алгоритм PKCSObjectIdentifiers.id_hmacWithSHA256, но он создает файлы P12, которые невозможно прочитать с помощью openssl или Java keytool. На оживленной странице обсуждения Github есть вопрос по этому поводу, но этот вопрос был задан почти год назад и пока не имеет ответов. Итак, я спрашиваю здесь: может ли BC создавать файлы PKCS#12, совместимые с openssl-3.0?

Подробнее здесь: https://stackoverflow.com/questions/798 ... pkcs5pbes2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»