是否可以创建具有自定义扩展名的X509v3证书,以便在证书中有一些自定义字段和值,例如"客户端的属性= User_A,iPhone,iOS 7"?
我目前正在使用BouncyCastle,但我不确定如何添加我想要的扩展。我仍然停留在创建证书生成器的第一步,如下所示:
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);;
.接下来我应该做什么以及如何添加自定义扩展?
编辑:我试图遵循这里的例子,但它给了我错误线程"main"java.lang.NoClassDefFoundError中的异常:org/bouncycastle/util/Encodable
/bouncycastle/util/Encodable 类出现在 Bouncycastle 1.52 版本中(目前最新版本是 1.56(。所以你可能正在使用以前版本的充气城堡。好吧,假设您的类路径中已经有 bcprov jar。