有多少格式的x.509客户端证书文件?

时间:2010-07-01 18:11:56

标签: x509

我正在开展一项任务,即在用户向服务器发送请求时获取客户端证书。我必须获得证书并从证书中获取3条信息:用户名,用户的电子邮件地址和用户的公司名称。

首先,只需获取用户名“Subject CN”,电子邮件地址为“Subject E”,公司名称为“subject OU”即可。

但后来我意识到有很多不同的CA和工具,他们以不同的格式颁发证书。例如,某些证书在“subject”字段中根本没有电子邮件地址字段,但是将其存储在SubjectAlternativeName扩展名中,并且用户名存储在“subject O”中,其他一些在“subject CN”字段中具有电子邮件以及公司的网址。

我想知道是否有任何方法可以确定地找出用户的姓名,公司名称和电子邮件地址?如果没有,如果证书格式有任何标准,以便这些信息存储在多个位置,或者它们只是在证书中的哪个字段中创建?

最后一个问题是:如果一个网站支持来自“所有”CA的客户端证书,我们谈论的CA数量是多少?这种情况是常见的还是大多数网站只支持它选择的1-2个CA?

非常感谢你的回复,我脑子里的问题太多了。

1 个答案:

答案 0 :(得分:9)

主题可分辨名称(主题DN)是相对可分辨名称(RDN)的有序序列,并且每个RDN是无序的属性值断言(AVA)集合。 AVA类似于“CN = yourname”或“O = yourorganization”(尽管它们不像证书中那样存储)。

大多数情况下,每个RDN只有一个AVA,因此,除非是奇怪的情况,例如,通常可以将主叫DN的CN RDN称为(或者甚至是“字段”,如果你不需要太具体)。 将主题DN序列化为可读字符串有多种标准,特别是从左到右或从右到左,或E= v.s. emailAddress=,或昏迷或斜杠分隔符。您应首先确保您的工具能够从其OID(对象标识符)而不是字符串表示中读取它们。

通常,序列将是国家,组织,组织单位,通用名称和电子邮件(尽管电子邮件地址总是有问题的,因为它曾经是那些并不总是以相同的方式序列化为字符串的那些地址取决于使用的标准。)

通常,CA可以根据主题DN的结构自由地执行他们想要的操作,以及他们是否使用主题备用名称扩展。这些事情往往受每个CA政策的约束(可能是相当长的技术和法律文件)。这个领域没有一个尺寸适合所有人。

在接受客户证书之前,您应确保同意其政策。一旦您信任CA证书,PKI模型就会在此之后很难进行细粒度选择。

受信任的CA列表取决于平台和配置。默认情况下,我认为OSX上的Java在其信任库中有大约150个CA证书,在其他平台上大约有70个。这些数字可能会有很大差异。

无论如何,如果您确实想要接受客户端证书,您或多或少需要知道它们的来源,因此通常情况下,您将拥有一小部分您愿意信任的CA.我绝对建议您在仔细选择手动(基于策略文档)后配置您愿意信任哪些CA进行客户端证书身份验证。

在实践中,我不确定为什么客户端会随机将证书发送到任何服务器,就像那样。客户端证书的PKI倾向于在封闭的管理域中或在完善的联合中更好地工作,在这种情况下,您和您的用户将属于这些组织,并且您将知道期望哪个CA. 另外,我建议限制使用客户端证书来验证用户,同时从其他地方获取更多属性,比如和LDAP服务器。通常,客户证书将被发送给个人一年或更长时间,而有关个人(甚至组织单位)的信息可能在实践中发生变化。如果您想使用CA或设置自己的CA,则必须考虑所有这些。