PEM:Privacy Enhanced Mail is a Base64 encoded DER certificate
PEM files are used to represent Certificate/PrivateKey in an understandable format. They have a distinct header and footer for every key, where the body is composed of Base64 encoded Key.
They are represented as shown below for (Certificate/PrivateKey/Certificate Signing Request/PublicKey)
Java Program to generate PEM files.
PEM files are used to represent Certificate/PrivateKey in an understandable format. They have a distinct header and footer for every key, where the body is composed of Base64 encoded Key.
They are represented as shown below for (Certificate/PrivateKey/Certificate Signing Request/PublicKey)
-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQCpF26VoB9/Au3Ct/dBFW5kfXFU8IkK+G3CG4slkVX2mwBtvLyb mFAuQ3RXvmX6tZxeUgwN7m+pZH+Y94lgAIpvcnzBEh8FFxwu0jy17uw+4ler5Soy YRGV8TYOeQHqoHS44clTG28T2RYy9lkRqTIkkCyo5ViyD7GVQVUgjR31LQIDAQAB AoGAFmkioPYd9ol+1aXoQVoDzZHKqYVPxIJ0mZto78u5ZvvYLLMtFDo1tkv+aXq0 rWvQk7ewHVCSwBKvzqhQLscjkbZqBdhnkBsyDQTcTQ+0sf8RGDHhBz2A1gGrBFhB rWc9wGuk7CFHUCrUL0ZXBquMM1KCd/+Fdg2+OQzcoJd9/AECQQDkLdyiaG4Y/lFM i4wtIf9rNVP4a1jHcYk1Ll7wvymY+v0e9zNVqKbkHaZ4/tyvD3MzVXZCByJZoFu4 sCWRK9WBAkEAvbVF3E7jxrQNTNRqLyQW6v0cmNSCSUfDkYANRuO+d6xvvT2HgrYs SiL8h4qDLkbM/LTvf9lxb8vSlUSt/3ctrQJAP70767YmQx8PkMVOg/ECS21bJoK+ CwCBJnTsmm2b7hr2iCbflScGb6SEsznmZZR4Rrex0CH0C3tLA91YsSPAgQJAa1Wc 6UFZbpuAyu+EBJgOv3XmMDJMZNnNtQ0Wdf11TpCpyBCAE1yvQmL5LlcYUZ6NbI2S 1Gta2z4fL4VkTR5JIQJAQE6QBPguRRYLFyDa6db+QyeJ1iBHy3I8XvK9bem+Dsby Km2l2KzLk3IpIEniqjLcoCQzFd5jp8m5VfjMx1doQQ== -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpF26VoB9/Au3Ct/dBFW5kfXFU 8IkK+G3CG4slkVX2mwBtvLybmFAuQ3RXvmX6tZxeUgwN7m+pZH+Y94lgAIpvcnzB Eh8FFxwu0jy17uw+4ler5SoyYRGV8TYOeQHqoHS44clTG28T2RYy9lkRqTIkkCyo 5ViyD7GVQVUgjR31LQIDAQAB -----END PUBLIC KEY----- -----BEGIN CERTIFICATE----- MIIBmjCCAQMCBgFOkeZMojANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhSYXZp VGVqYTAeFw0xNTA3MTQxMzI3NDVaFw0xNTA2MjkyMTQ1NTZaMBMxETAPBgNVBAMT CFJhdmlUZWphMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpF26VoB9/Au3C t/dBFW5kfXFU8IkK+G3CG4slkVX2mwBtvLybmFAuQ3RXvmX6tZxeUgwN7m+pZH+Y 94lgAIpvcnzBEh8FFxwu0jy17uw+4ler5SoyYRGV8TYOeQHqoHS44clTG28T2RYy 9lkRqTIkkCyo5ViyD7GVQVUgjR31LQIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAIh6 cNhWToRwhaJBykHXPqiaqPDA8n0xtq65dBiUQWOKeoXw0I7+LKUUzfHfb4wGZoLK W2rBnNCY1BtpasqtAkdZ/Q+keJQd9xBcPqnKGUEqxxX7omB7cKYuhw9C+rGn/K1J Ci1xlYBWuRsMd3A064fSHV0Adu+ru9YaWyS5+aLU -----END CERTIFICATE-----
Java Program to generate PEM files.
package bc; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.math.BigInteger; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.SecureRandom; import java.security.Security; import java.security.cert.X509Certificate; import java.util.Date; import javax.security.auth.x500.X500Principal; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.openssl.PEMWriter; import org.bouncycastle.x509.X509V1CertificateGenerator; public class PEMWrite { public static void main(String[] args) throws Exception { generateSelfSignedX509Certificate(); } static { // adds the Bouncy castle provider to java security Security.addProvider(new BouncyCastleProvider()); } /** * 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()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // GENERATE THE X509 CERTIFICATE X509V1CertificateGenerator certGen = new X509V1CertificateGenerator(); X500Principal dnName = new X500Principal("CN=RaviTeja"); 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"); System.out.println(cert); // PEM format representing Certificate PEMWriter pemWriter = new PEMWriter(new PrintWriter(System.out)); pemWriter.writeObject(cert); pemWriter.flush(); //Loads Private Key as PEM format into private_key.pem file File file = new File("private_key.pem"); PEMWriter pw1 = new PEMWriter(new FileWriter(file)); pw1.writeObject(keyPair.getPrivate()); pw1.flush(); pw1.close(); //PEM format representing PrivateKey pemWriter.writeObject(keyPair.getPrivate()); pemWriter.flush(); //PEM format representing PublicKey pemWriter.writeObject(keyPair.getPublic()); pemWriter.flush(); pemWriter.close(); } }
No comments:
Post a Comment