throws GeneralSecurityException
{
this.generator = new X509V3CertificateGenerator();
PKCS10CertificationRequest pkcs10Req =
getPKCS10CertificationRequest(csrPem);
String newCn = calcCommonName(pkcs10Req.getPublicKey());
BigInteger serialNum = new BigInteger(newCn);
TBSCertificateStructure issuerTbsCert = getTBSCertificate(issuerCert);
addProxyCertInfoExtension();
X509Extensions extensions = issuerTbsCert.getExtensions();
if (extensions != null) {
X509Extension ext = null;
ext = extensions.getExtension(X509Extensions.KeyUsage);
addKeyUsage(ext);
ext = extensions.getExtension(X509Extensions.ExtendedKeyUsage);
addExtendedKeyUsage(ext);
}
X509Name issuerDn = issuerTbsCert.getSubject();
X509Name subjectDn = buildSubjectDn(issuerDn, newCn);
generator.setSubjectDN(subjectDn);
generator.setIssuerDN(issuerDn);
generator.setSerialNumber(serialNum);
generator.setPublicKey(pkcs10Req.getPublicKey());
generator.setSignatureAlgorithm( issuerCert.getSigAlgName() );
generator.setNotBefore(new Date(System.currentTimeMillis() - SKEW));
generator.setNotAfter(new Date(System.currentTimeMillis() + certTerm));
return generator.generateX509Certificate(issuerKey);