
cybervillains.ca.CertificateCreator Maven / Gradle / Ivy
Go to download
Selenium automates browsers. That's it! What you do with that power is entirely up to you.
package cybervillains.ca;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.x509.BasicConstraints;
import org.bouncycastle.asn1.x509.KeyUsage;
import org.bouncycastle.asn1.x509.X509Extensions;
import org.bouncycastle.jce.X509Principal;
import org.bouncycastle.x509.X509V3CertificateGenerator;
import org.bouncycastle.x509.extension.SubjectKeyIdentifierStructure;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SignatureException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Date;
/**
* Methods for creating certificates.
*
* *************************************************************************************** Copyright
* (c) 2007, Information Security Partners, LLC All rights reserved.
*
* In a special exception, Selenium/OpenQA is allowed to use this code under the Apache License 2.0.
*
* @author Brad Hill
*
*/
public class CertificateCreator {
/**
* The default sign algorithm for this package is SHA1 with RSA.
*/
public static final String SIGN_ALGO = "SHA1withRSA";
/**
* Creates a typical Certification Authority (CA) certificate.
*
* @throws SecurityException
* @throws InvalidKeyException
* @throws NoSuchProviderException
* @throws NoSuchAlgorithmException
* @throws CertificateException
*/
@SuppressWarnings("deprecation")
public static X509Certificate createTypicalMasterCert(final KeyPair keyPair)
throws SignatureException, InvalidKeyException, SecurityException, CertificateException,
NoSuchAlgorithmException, NoSuchProviderException
{
X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator();
X509Principal issuer =
new X509Principal("O=CyberVillians.com,OU=CyberVillians Certification Authority,C=US");
// Create
v3CertGen.setSerialNumber(BigInteger.valueOf(1));
v3CertGen.setIssuerDN(issuer);
v3CertGen.setSubjectDN(issuer);
// Set validity period
v3CertGen.setNotBefore(new Date(System.currentTimeMillis() - 12 /* months */*
(1000L * 60 * 60 * 24 * 30)));
v3CertGen.setNotAfter(new Date(System.currentTimeMillis() + 240 /* months */*
(1000L * 60 * 60 * 24 * 30)));
// Set signature algorithm & public key
v3CertGen.setPublicKey(keyPair.getPublic());
v3CertGen.setSignatureAlgorithm(CertificateCreator.SIGN_ALGO);
// Add typical extensions for signing cert
v3CertGen.addExtension(
X509Extensions.SubjectKeyIdentifier,
false,
new SubjectKeyIdentifierStructure(keyPair.getPublic()));
v3CertGen.addExtension(
X509Extensions.BasicConstraints,
true,
new BasicConstraints(0));
v3CertGen.addExtension(
X509Extensions.KeyUsage,
false,
new KeyUsage(KeyUsage.cRLSign | KeyUsage.keyCertSign));
DERSequence typicalCAExtendedKeyUsages = new DERSequence(new ASN1Encodable[] {
new DERObjectIdentifier(ExtendedKeyUsageConstants.serverAuth),
new DERObjectIdentifier(ExtendedKeyUsageConstants.OCSPSigning),
new DERObjectIdentifier(ExtendedKeyUsageConstants.verisignUnknown)
});
v3CertGen.addExtension(
X509Extensions.ExtendedKeyUsage,
false,
typicalCAExtendedKeyUsages);
X509Certificate cert = v3CertGen.generate(keyPair.getPrivate(), "BC");
cert.checkValidity(new Date());
cert.verify(keyPair.getPublic());
return cert;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy