如何从字节[]中提取X.509 DER证书

  • 本文关键字:提取 DER 证书 字节 java
  • 更新时间 :
  • 英文 :


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

在证书之后,还有更多的字节包含不相关的数据。

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

必须使用可分辨的编码规则,使用此处的ASN.1定义对证书进行编码。

首先读取序列标记(一个字节,检查其值是否为30 hex)。

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

因此,现在应该将标记长度(1)、长度编码的长度(可能是3个字节)和值的长度加在一起。这将为您提供整个证书的大小。将其读入缓冲区或发明一些有界输入流,并将其交给X509CertificategetInstance工厂方法。

快乐的编码。

最新更新