我在读取使用 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-----
所以我想读取的数据是正确的。