Last active
March 2, 2024 00:41
-
-
Save alessandroleite/fa3e763552bb8b409bfa to your computer and use it in GitHub Desktop.
Generate a self signed X509 certificate with Bouncy Castle
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Generate a self signed X509 certificate with Bouncy Castle. | |
// StringBuilder sb = new StringBuilder(); | |
// | |
// for (int i = 0; i < pub.length; ++i) | |
// { | |
// sb.append(Integer.toHexString(0x0100 + (pub[i] & 0x00FF)).substring(1)); | |
// } | |
// | |
// System.out.println(sb); | |
// sb.setLength(0); | |
// | |
// for (int i = 0; i < pri.length; ++i) | |
// { | |
// sb.append(Integer.toHexString(0x0100 + (pri[i] & 0x00FF)).substring(1)); | |
// } | |
// | |
// byte[] enc = new PKCS8Generator(privateKey).generate().getContent(); | |
// | |
// System.out.println(new String(Base64.encodeBase64(enc))); | |
// | |
//// new JcaPKCS8Generator(privateKey, new Output) | |
// | |
// Cipher cipher = SecurityUtils.getCipher("RSA"); | |
// cipher.init(Cipher.DECRYPT_MODE, privateKey); | |
// byte[] doFinal = cipher.doFinal(pub); | |
// System.out.println(new String(doFinal)); | |
// | |
// System.out.println(sb); | |
/** | |
* Generate a self signed X509 certificate with Bouncy Castle. | |
*/ | |
static void generateSelfSignedX509Certificate() throws Exception { | |
// yesterday | |
Date validityBeginDate = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); | |
// in 2 years | |
Date validityEndDate = new Date(System.currentTimeMillis() + 2 * 365 * 24 * 60 * 60 * 1000); | |
// GENERATE THE PUBLIC/PRIVATE RSA KEY PAIR | |
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC"); | |
keyPairGenerator.initialize(1024, new SecureRandom()); | |
java.security.KeyPair keyPair = keyPairGenerator.generateKeyPair(); | |
// GENERATE THE X509 CERTIFICATE | |
X509V1CertificateGenerator certGen = new X509V1CertificateGenerator(); | |
X500Principal dnName = new X500Principal("CN=John Doe"); | |
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis())); | |
certGen.setSubjectDN(dnName); | |
certGen.setIssuerDN(dnName); // use the same | |
certGen.setNotBefore(validityBeginDate); | |
certGen.setNotAfter(validityEndDate); | |
certGen.setPublicKey(keyPair.getPublic()); | |
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption"); | |
X509Certificate cert = certGen.generate(keyPair.getPrivate(), "BC"); | |
// DUMP CERTIFICATE AND KEY PAIR | |
System.out.println(Strings.repeat("=", 80)); | |
System.out.println("CERTIFICATE TO_STRING"); | |
System.out.println(Strings.repeat("=", 80)); | |
System.out.println(); | |
System.out.println(cert); | |
System.out.println(); | |
System.out.println(Strings.repeat("=", 80)); | |
System.out.println("CERTIFICATE PEM (to store in a cert-johndoe.pem file)"); | |
System.out.println(Strings.repeat("=", 80)); | |
System.out.println(); | |
PEMWriter pemWriter = new PEMWriter(new PrintWriter(System.out)); | |
pemWriter.writeObject(cert); | |
pemWriter.flush(); | |
System.out.println(); | |
System.out.println(Strings.repeat("=", 80)); | |
System.out.println("PRIVATE KEY PEM (to store in a priv-johndoe.pem file)"); | |
System.out.println(Strings.repeat("=", 80)); | |
System.out.println(); | |
pemWriter.writeObject(keyPair.getPrivate()); | |
pemWriter.flush(); | |
System.out.println(); | |
} |
X509V1CertificateGenerator
is now deprecated /-:
You should now use org.bouncycastle.cert.X509v3CertificateBuilder;
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
X509V1CertificateGenerator
is now deprecated /-: