I have problem with getting and setting Certificate Policies extension in Java. I am using Bouncy Castle 1.57.
I am adding extension to certificate generator like this:
boolean isCritical = Extensions.certificatePolicies;
String cpValue = Extensions.certificatePoliciesValue;
cerGen.addExtension(Extension.certificatePolicies, isCritical, cpValue.getBytes());
And getting this extension like:
byte[] policyBytes = certificate.getExtensionValue(Extension.certificatePolicies.toString());
if (policyBytes != null) {
Object policyObj = new ASN1InputStream(policyBytes).readObject();
policyBytes = ((DEROctetString) policyObj).getOctets();
String policyField = new String(policyBytes); // this is cpValue when set
}
This works fine when until I export certificate, but when I export it to DER or PEM type, when I try to import it I am getting error:
java.io.IOException: Invalid encoding for CertificatePoliciesExtension.
Here's my source code of import:
CertificateFactory fact = CertificateFactory.getInstance("X.509");
FileInputStream is = new FileInputStream(file.getAbsolutePath());
X509Certificate cer = (X509Certificate) fact.generateCertificate(is);
Exception occurs on last line when I try to generate certificate.