通过充气城堡图书馆将der转换为pem

时间:2012-11-26 13:09:41

标签: java cryptography bouncycastle x509

我找到了许多从 pem 转换为 der 的答案。

但是,我找不到将 der 转换为 pem 的方法。

例如,以下代码生成编码文件 pkcs10.cer

public static void main(String[] args) throws Exception
{
    X509Certificate[] chain = buildChain();
    PEMWriter pemWrt = new PEMWriter(new OutputStreamWriter(System.out));
    pemWrt.writeObject(chain[0]);

    FileWriter fwO = new FileWriter("pkcs10.cer");
    fwO.write((chain[0]).toString());

    fwO.close();
    pemWrt.close();

}

像,   [0]版本:3          SerialNumber:1353995641265              IssuerDN:CN =测试证书            开课日期:2012年11月26日星期一太平洋标准时间21:54:01            截止日期:2011年11月26日星期一太平洋标准时间21:54:51

但是,我不知道如何从文件中制作pem编码的认证。

2 个答案:

答案 0 :(得分:5)

我不是Java开发人员,因此我无法向您展示代码或指向类。 PEM只是二进制DER的Base64编码,带有标准的头部和预告片。

答案 1 :(得分:1)

下面是一个将各种BC对象转换为PEM字符串序列化格式的方法。请注意,此代码适用于BC的C#版本,但应该毫不费力地转换为Java版本。

// converts bouncy castle objects of type
// X509Certificate, X509Crl, AsymmetricCipherKeyPair, AsymmetricKeyParameter,
// IX509AttributeCertificate, Pkcs10CertificationRequest, Asn1.Cms.ContentInfo 
// to PEM format string
public string ToPem(object obj)
{
    using (MemoryStream mem = new MemoryStream())
    {
        StreamWriter writer = new StreamWriter(mem);
        Org.BouncyCastle.OpenSsl.PemWriter pem = new Org.BouncyCastle.OpenSsl.PemWriter(writer);
        pem.WriteObject(obj);
        // force the pem write to flush it's data - kind of abnoxious you have to do that
        pem.Writer.Flush();
        // create a stream reader to read the data.
        StreamReader reader = new StreamReader(mem);
        mem.Position = 0;
        string pemStr = reader.ReadToEnd();
        return pemStr;
    }
}