如何从byte []中提取X.509 DER证书?

时间:2014-09-29 21:01:30

标签: java

我有一个以(可变长度)DER格式的X.509证书开头的字节数组。

证书之后,有更多字节包含无关数据。

如何在不知道其长度的情况下从字节数组中仅提取属于证书的字节(我将使用Java)?

1 个答案:

答案 0 :(得分:3)

证书必须使用尊重的编码规则进行编码,使用找到here的ASN.1定义。

首先读取序列标签(一个字节,检查它是否具有值30十六进制)。

现在解析DER长度字段。这被编码为单个字节,最大值为128.对于128到256的长度,将有两个字节(十六进制为81 XX,其中XX为无符号值)。然后你得到两个字节,值长度从256到64KiB,以十六进制编码为82 XX XX,再次作为大端无符号值。如果证书超过64KiB,即使您可以猜测长度的下一个编码,您也可能遇到麻烦。

所以现在你应该添加标签长度(1),长度编码的长度(可能是3个字节)和值的长度。这将为您提供整个证书的大小。将其读入缓冲区或创建一些有界输入流并将其提供给X509Certificate的{​​{1}}工厂方法。

快乐的编码。