public static KeyStore readPKCS12KeyStore(
      String alias, Certificate[] chain, KeyPair keyPair, char[] pwd) throws Exception {
    PKCS12SafeBagBuilder BagBuilder = new JcaPKCS12SafeBagBuilder((X509Certificate) chain[0]);
    BagBuilder.addBagAttribute(PKCS12SafeBag.friendlyNameAttribute, new DERBMPString(alias));
    SubjectKeyIdentifier pubKeyId =
        new JcaX509ExtensionUtils().createSubjectKeyIdentifier(keyPair.getPublic());
    BagBuilder.addBagAttribute(PKCS12SafeBag.localKeyIdAttribute, pubKeyId);

    KeyStore store = KeyStore.getInstance(KEY_STORE_TYPE, JCE_PROVIDER);
    store.load(null, null);
    store.setKeyEntry(alias, keyPair.getPrivate(), pwd, chain);

    return store;
  }
  public static void genPKCS12File(OutputStream pfxOut, PrivateKey key, Certificate[] chain)
      throws Exception {

    OutputEncryptor encOut =
        new JcePKCSPBEOutputEncryptorBuilder(NISTObjectIdentifiers.id_aes256_CBC)
            .setProvider("BC")
            .build(KEY_PASSWD);

    PKCS12SafeBagBuilder taCertBagBuilder = new JcaPKCS12SafeBagBuilder((X509Certificate) chain[2]);
    taCertBagBuilder.addBagAttribute(
        PKCS12SafeBag.friendlyNameAttribute, new DERBMPString("Bouncy Primary Certificate"));

    //		PKCS12SafeBagBuilder caCertBagBuilder = new
    // JcaPKCS12SafeBagBuilder((X509Certificate)chain[1]);
    //		caCertBagBuilder.addBagAttribute(PKCS12SafeBag.friendlyNameAttribute, new
    // DERBMPString("Bouncy Intermediate Certificate"));

    PKCS12SafeBagBuilder eeCertBagBuilder = new JcaPKCS12SafeBagBuilder((X509Certificate) chain[0]);
    eeCertBagBuilder.addBagAttribute(
        PKCS12SafeBag.friendlyNameAttribute, new DERBMPString("Eric's Key"));

    JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils();
    SubjectKeyIdentifier pubKeyId = extUtils.createSubjectKeyIdentifier(chain[0].getPublicKey());
    eeCertBagBuilder.addBagAttribute(PKCS12SafeBag.localKeyIdAttribute, pubKeyId);

    PKCS12SafeBagBuilder keyBagBuilder = new JcaPKCS12SafeBagBuilder(key, encOut);
    keyBagBuilder.addBagAttribute(
        PKCS12SafeBag.friendlyNameAttribute, new DERBMPString("Eric's Key"));
    keyBagBuilder.addBagAttribute(PKCS12SafeBag.localKeyIdAttribute, pubKeyId);

    PKCS12PfxPduBuilder builder = new PKCS12PfxPduBuilder();
    builder.addData(keyBagBuilder.build());
    builder.addEncryptedData(
        new JcePKCSPBEOutputEncryptorBuilder(PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC2_CBC)
            .setProvider("BC")
            .build(KEY_PASSWD),
        new PKCS12SafeBag[] {
          eeCertBagBuilder.build(),
          // caCertBagBuilder.build(),
          taCertBagBuilder.build()
        });
    PKCS12PfxPdu pfx =
        builder.build(
            new JcePKCS12MacCalculatorBuilder(NISTObjectIdentifiers.id_sha256), KEY_PASSWD);
    // make sure we don't include indefinite length encoding
    pfxOut.write(pfx.getEncoded(ASN1Encoding.DL));
    pfxOut.close();
  }