79 X500Name subjectDN =
new X500Name(
"CN=" + subject);
82 SecureRandom random = SecureRandom.getInstance(
"SHA1PRNG");
83 BigInteger serialNumber = BigInteger.valueOf(Math.abs(random.nextInt()));
86 Date notBefore =
new Date(System.currentTimeMillis());
87 Date notAfter =
new Date(System.currentTimeMillis() + (((1000L * 60 * 60 * 24 * 30)) * 12) * 3);
90 SubjectPublicKeyInfo subjPubKeyInfo =
new SubjectPublicKeyInfo(ASN1Sequence.getInstance(keyPair.getPublic()
93 X509v3CertificateBuilder certGen =
new X509v3CertificateBuilder(
new X500Name(caCert.getSubjectDN().getName()),
94 serialNumber, notBefore, notAfter, subjectDN, subjPubKeyInfo);
96 DigestCalculator digCalc =
new BcDigestCalculatorProvider()
97 .get(
new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1));
98 X509ExtensionUtils x509ExtensionUtils =
new X509ExtensionUtils(digCalc);
101 certGen.addExtension(Extension.subjectKeyIdentifier,
false,
102 x509ExtensionUtils.createSubjectKeyIdentifier(subjPubKeyInfo));
105 certGen.addExtension(Extension.authorityKeyIdentifier,
false,
106 x509ExtensionUtils.createAuthorityKeyIdentifier(subjPubKeyInfo));
109 certGen.addExtension(Extension.keyUsage,
false,
new KeyUsage(KeyUsage.digitalSignature | KeyUsage.keyCertSign
110 | KeyUsage.cRLSign));
113 KeyPurposeId[] EKU =
new KeyPurposeId[2];
114 EKU[0] = KeyPurposeId.id_kp_emailProtection;
115 EKU[1] = KeyPurposeId.id_kp_serverAuth;
117 certGen.addExtension(Extension.extendedKeyUsage,
false,
new ExtendedKeyUsage(EKU));
120 certGen.addExtension(Extension.basicConstraints,
true,
new BasicConstraints(0));
123 ContentSigner sigGen =
new JcaContentSignerBuilder(
"SHA1WithRSAEncryption").setProvider(
"BC").build(caPrivateKey);
126 return new JcaX509CertificateConverter().setProvider(
"BC").getCertificate(certGen.build(sigGen));
127 }
catch (Exception e) {
128 throw new RuntimeException(
"Error creating X509v3Certificate.", e);