X.509证书的序列号

时间:2010-01-19 20:43:47

标签: java security x509certificate pki x509

我正在java中为uni类编写一个证书颁发机构,现在我不知道证书序列号的最佳选择是什么。

  • 从0到veryBigNumber的简单静态计数器
  • 一些巨大的BigInt随机数

是否有任何理由选择其中一个......或者没有一个?

感谢,

6 个答案:

答案 0 :(得分:2)

技术上从0到veryBigNumber的计数器比bigRandomNumber更容易实现 - 因为序列号必须不同。

然而 - 如果您关心的人知道您发放了多少证书,您可能不想使用简单的计数器。

答案 1 :(得分:2)

这取决于您使用的序列号。如果您是一家小公司,如果您计划为每位客户提供一份证书,那么您的序列号将显示您拥有的客户数量。

除此之外,我没有看到为什么序列号不应该是串行的任何原因。有些人认为使用序列号会向潜在的攻击者提供一些信息(下一个序列号),但我不认为这是一个大问题。

答案 2 :(得分:2)

我建议您使用随机数,但在数据库中保留这些已发布序列号的列表。这将允许两件事。

  1. 您永远不会重新发出相同的序列号。
  2. 您可以从证书的序列号中了解它是否远程有效。
  3. 当然#1要求您在生成时检查已知列表并在发生冲突时生成新的随机数,而#2在安全性或验证方面并不是很多,但有趣的前景从未 - 的少。

答案 3 :(得分:1)

主要要求是对(Issuer distinguished name, serial number)在宇宙中应该是唯一的。因此,您不应该使用随机数,除非它太大以至于重复的概率可以忽略不计。一个20字节的随机数应该足够了。如果您不介意其他人知道您发放了多少证书,那么一个简单的计数器就完全可以了。

利用计数器型序列号,最近对利用MD5中的弱点的SSL证书发行人(Alex Sotirov等人)的攻击实际上变得更加容易。随机序列号未被攻击。这并不意味着可预测的序列号是安全性差的,它只是意味着对于这个应用程序,随机序列号可以帮助掩盖MD5中的弱点。根本问题仍然是MD5。

答案 4 :(得分:0)

我认为如果我们检查一下Serial这个词,答案是隐含的......串行,系列,进展等

答案 5 :(得分:0)

我刚碰巧偶然遇到过这个问题,你会从答案中想到可预测的序列号不是安全问题。我会说是一个问题,随机序列号更加安全。参看例如,火焰攻击等herehere或维基百科文章" Predictable serial number attack。"