1

我在读取使用 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-----

所以我想读取的数据是正确的。

4

0 回答 0