x.509 证书序列号格式在括号内和不在括号内有什么区别。

What is the difference for x.509 certificate serial number format in brackets and not in brackets.

我已经生成了一个证书,它的序列号格式是这样的 0eaa20f53cacdcaa40fbde51ab50c7d1

我也看到过这种格式的证书。我想生成一个这样的。 10978342379280287625 (0x985ae83a6b9e477f)

我该怎么做?有什么区别?

一个 X.509 Serial Number 是一个整数,其值可以用 20 个字节表示(“或更少”,因为可分辨编码规则 (DER) 说您省略了任何不必要的前导 0x00 字节(如果它从一个负数到正数,或者如果它是数字 0)。

10978342379280287625 (0x985ae83a6b9e477f)

如果您访问一个进行大量转换的网站,例如 http://www.mobilefish.com/services/big_number/big_number.php,您会看到 985ae83a6b9e477f (hex) 等于 10978342379280287615 (decimal).

这个数字的DER编码值为02 09 00 98 5a e8 3a 6b 9e 47 7f

0eaa20f53cacdcaa40fbde51ab50c7d1

这个数字(DER 02 10 0e aa 20 f5 3c ac dc aa 40 fb de 51 ab 50 c7 d1)相当于十进制值19492550873724953657229484824238016465

假设同一个软件显示两种效果图,比如 OpenSSL,它是否以十进制和十六进制显示的差异可能与序列号的长度有关。对于 OpenSSL,截止值为 8 个内容(非 0x00)字节:https://github.com/openssl/openssl/blob/c4a60150914fc260c3fc2854e13372c870bdde76/crypto/x509/t_x509.c#L88

由于 0x985ae83a6b9e477f 适合 unsigned long,为了方便用户,OpenSSL 将其打印为十进制值。