【发布时间】:2017-08-22 23:46:14
【问题描述】:
我正在尝试从 X.509 证书中获取序列号。当我将代码生成的序列号与实际序列号(在 Windows 上)进行比较时,实际序列号的前导零(X509证书)丢失。
有任何建议或替代方法来获取带前导零的十六进制 x.509 证书的序列号吗??
下面是我目前正在使用的代码段:
InputStream in = new FileInputStream("cert");
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(in);
String serialNum = certificate.getSerialNumber().toString(16);
System.out.println(serialNum);
【问题讨论】:
-
为什么你认为应该有叶子零?可以显示 ASN 编码的证书序列号吗?
-
实际序列号看起来像00 a6 XX XX XX XX XX XX XX。但是上面源代码生成的序列号看起来像a6 XX XX XX XX XX XX XX..缺少前导00。
-
序列号定义为 ASN.1 INTEGER。前导零不重要。
-
@EJP 实际上,前导零很重要。 ASN.1 整数是二补整数。根据 RFC5280,序列号必须是正整数。如果正整数的最高有效位为 1,则编码值必须附加额外的零字节以表示正整数。
标签: java x509 java-security