Unable to write CSR generated using org.bouncycastle.asn1.pkcs.CertificationRequest in PEM file format

bouncycastle, java, x509certificate

Solution

Better solution is to use PemObject.

    String type = "CERTIFICATE REQUEST";
    byte[] encoding = pkcs10.getEncoded();

    PemObject pemObject = new PemObject(type, encoding);

    StringWriter str = new StringWriter();
    PEMWriter pemWriter = new PEMWriter(str);
    pemWriter.writeObject(pemObject);
    pemWriter.close();
    str.close();

    System.out.println(str);

Problem

I am generating CSR using BouncyCastle APIs with bcprov-jdk15on-147 jars. ``` CertificationRequestInfo certInfo = new CertificationRequestInfo(subject, subKeyInfo, new DERSet(attribute)); org.bouncycastle.operator.ContentSigner sigGen = null; sigGen = new JcaContentSignerBuilder("SHA1withRSA").setProvider("BC").build(privateKey); org.bouncycastle.asn1.pkcs.CertificationRequest ctest = new org.bouncycastle.asn1.pkcs.CertificationRequest(certInfo,sigAlgName,new DERBitString(sigGen.getSignature())); ``` I am passing this obejct to my calling function: ``` GenerateCSR gcsr = GenerateCSR.getInstance(); System.out.println("Public Key:\n"+gcsr.getPublicKey().toString()); System.out.println("Private Key:\n"+gcsr.getPrivateKey().toString()); org.bouncycastle.asn1.pkcs.CertificationRequest csr = gcsr.getCSR("IMO"); System.out.println("CSR Request Generated!!"); FileWriter fcsr = new FileWriter("C:\\test.txt"); PEMWriter w1 = new PEMWriter(fcsr); w1.writeObject(csr); ``` But i am getting the below exception: ``` Exception in thread "main" org.bouncycastle.util.io.pem.PemGenerationException: unknown object passed - can't encode. at org.bouncycastle.openssl.MiscPEMGenerator.createPemObject(Unknown Source)" ```

Original source