final CertificateValidity validity = new CertificateValidity(notBefore, notAfter);
final X509CertInfo info = createCertificateInfo(subject, subjectPublic, issuer, issuerPublicKey, validity, signer);
final CertificateExtensions extensions = (isCaCert) ? (getCACertificateExtensions()) : (getCertificateExtensions(subjectPublic, issuerPublicKey));
info.set(X509CertInfo.EXTENSIONS, extensions);
final X509CertImpl cert = new X509CertImpl(info);
cert.sign(issuerPrivateKey, SIGNATURE_ALGORITHM);
return cert;
} catch (Exception e) {
throw new CertificateException("Failed to generate certificate: "+ e.getMessage(), e);
}
}