使用自定义扩展创建X509V3证书

时间:2017-02-07 14:05:12

标签: java x509certificate bouncycastle

是否可以创建具有自定义扩展名的X509v3证书,以便在证书中有一些自定义字段和值,例如“客户端属性= User_A,iPhone,iOS 7”?

我目前正在使用BouncyCastle,但我不确定如何添加我想要的扩展程序。我仍然坚持创建certificatebuilder的第一步,如下所示:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(4096);
    KeyPair key = keyGen.generateKeyPair();
    PublicKey pub = key.getPublic();
    PrivateKey priv = key.getPrivate();
    X509v3CertificateBuilder v3Bldr = new JcaX509v3CertificateBuilder(issuerBuilder.build(), BigInteger.valueOf(3),
            new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30), new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 30)),
            subjectBuilder.build(), pub);
    ASN1ObjectIdentifier asn1iod =
            new ASN1ObjectIdentifier("1.2.3.4");     
    v3Bldr.addExtension(asn1iod,false,b);

    X509CertificateHolder certHldr = v3Bldr.build(new JcaContentSignerBuilder("SHA1WithRSA").setProvider("BC").build(priv));

    X509Certificate cert = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certHldr);;

。接下来我该怎么做以及如何添加自定义扩展程序?

编辑:我试图按照here中的示例进行操作,但它在线程“main”中给出了错误异常java.lang.NoClassDefFoundError:org / bouncycastle / util / Encodable

1 个答案:

答案 0 :(得分:0)

org / bouncycastle / util / Encodable类出现在bouncycastle 1.52版本中(目前最后一个版本是1.56)。 所以你可能正在使用之前版本的bouncycastle。 好吧,假设你的类路径中已经有了bcprov jar。