我找到了许多从 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编码的认证。
答案 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;
}
}