Spongycastle将证书写入PEM然后读取它

时间:2015-07-13 16:03:14

标签: java android x509 pem spongycastle

我在阅读我生成并使用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-----

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

0 个答案:

没有答案