是否有一些高级方法可以将 X509Certificate 写入 PEM 格式的字符串?目前我正在执行 x509cert.encode() 以将其写入 DER 格式的字符串,然后对其进行 base 64 编码并附加页眉和页脚以创建 PEM 字符串,但这似乎很糟糕。特别是因为我也必须换行。
原文由 pizzathehut 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否有一些高级方法可以将 X509Certificate 写入 PEM 格式的字符串?目前我正在执行 x509cert.encode() 以将其写入 DER 格式的字符串,然后对其进行 base 64 编码并附加页眉和页脚以创建 PEM 字符串,但这似乎很糟糕。特别是因为我也必须换行。
原文由 pizzathehut 发布,翻译遵循 CC BY-SA 4.0 许可协议
还没有看到有人提出 Java 8 的 Base64.getMimeEncoder
方法 - 实际上允许您指定行长度 和 行分隔符,如下所示:
final Base64.Encoder encoder = Base64.getMimeEncoder(64, LINE_SEPARATOR.getBytes());
我查看了这个 ^ 与标准编码器是否有任何区别,但我找不到任何东西。 javadoc 为 BASIC 和 MIME 编码器引用了 RFC 2045 ,并为 BASIC 添加了 RFC 4648 。 AFAIK 这两个标准都使用相同的 Base64 字母表(表格看起来相同),因此如果您需要指定行长度,您应该可以使用 MIME。
这意味着在 Java 8 中,这可以通过以下方式实现:
import java.security.cert.Certificate;
import java.security.cert.CertificateEncodingException;
import java.util.Base64;
…
public static final String BEGIN_CERT = "-----BEGIN CERTIFICATE-----";
public static final String END_CERT = "-----END CERTIFICATE-----";
public final static String LINE_SEPARATOR = System.getProperty("line.separator");
…
public static String formatCrtFileContents(final Certificate certificate) throws CertificateEncodingException {
final Base64.Encoder encoder = Base64.getMimeEncoder(64, LINE_SEPARATOR.getBytes());
final byte[] rawCrtText = certificate.getEncoded();
final String encodedCertText = new String(encoder.encode(rawCrtText));
final String prettified_cert = BEGIN_CERT + LINE_SEPARATOR + encodedCertText + LINE_SEPARATOR + END_CERT;
return prettified_cert;
}
原文由 josh-cain 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.8k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
4 回答1.9k 阅读
这还不错。 Java 不提供任何编写 PEM 文件的函数。你正在做的是正确的方法。甚至 KeyTool 也做同样的事情,
如果使用 BouncyCastle,则可以使用 PEMWriter 类在 PEM 中写出 X509 证书。