我在阅读我生成并使用SpongyCastle写入磁盘的证书的PEM文件时遇到问题。
我使用以下功能保存我的证书
private static void saveCertificate(Context context, X509CertificateHolder certificateHolder) throws Exception {
JcaPEMWriter pemWriter = new JcaPEMWriter(new FileWriter(new File(context.getFilesDir(), "certificate.pem")));
PEMEncryptor encryptor = new JcePEMEncryptorBuilder("DES-EDE3-CBC").setProvider("BC").build("myPass".toCharArray());
pemWriter.writeObject(certificate, encryptor);
pemWriter.close();
}
这似乎应该像它应该的那样工作。
现在,当我尝试使用`PEMParser读取此文件时,会引发异常。 我正在使用以下函数来读取文件。
private static X509CertificateHolder loadCertificate(Context context) throws Exception {
PEMParser pemParser = new PEMParser(new FileReader(new File(context.getFilesDir(), "certificate.pem")));
Object object = pemParser.readObject(); // -- exception raised here --
JcaX509CertificateConverter converter = new JcaX509CertificateConverter().setProvider("BC");
PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build("myPass".toCharArray());
X509CertificateHolder certificateHolder;
//still need to convert 'object' to my certificate
pemParser.close();
return (X509CertificateHolder) object;
}
大多数情况下,例外的原因是
org.spongycastle.openssl.PEMException: problem parsing cert: org.spongycastle.cert.CertIOException: malformed data: unknown object in getInstance: org.spongycastle.asn1.DERApplicationSpecific
但有时我会得到这个
org.spongycastle.openssl.PEMException: problem parsing cert: java.io.IOException: DER length more than 4 bytes: 25
我不清楚我做错了什么。 文件输出看起来没问题。它的格式如下
-----BEGIN CERTIFICATE-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,3C6C...
2mFGwwz...
-----END CERTIFICATE-----
我做错了什么?
修改
如果我使用BufferedReader
将文件读入字符串,则这是输出
-----BEGIN CERTIFICATE-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,3C6C...
2mFGwwz...
-----END CERTIFICATE-----
所以我认为读取的数据是正确的。