X.509 证书可用于服务器、客户端、电子邮件、代码签名和更多应用程序。http://twitpic.com/6gdxaq表明证书可以具有不同的这些“功能” - 但您如何看待这些?什么 X.509 字段表示这些不同的用途?
如何表示 X.509 (SSL) 证书的可能用途?
X.509“密钥用法”定义了颁发者允许证书的用途。但请记住,并非所有应用程序都遵循此要求。
有几个扩展限制了证书的使用。就X.509而言,没有任何扩展的基本证书被视为“适合任何目的” 。密钥类型仍然会产生一些后果;例如,RSA 密钥可以同时用于非对称加密和签名,但 DSA(或 ECDSA)密钥在构造上只能用于签名(不过,仅签名证书对于 SSL 客户端或服务器仍然足够好,因为“DHE”密码套件)。
限制证书“功能”的标准扩展有以下两个:
Key Usage:这是一组指示低级操作的标志。正好有九个标志:digitalSignature、nonRepudiation、keyEncipherment、dataEncipherment、keyAgreement、keyCertSign、cRLSign、encipherOnly 和 decipherOnly。每个标志的语义都是微妙的,并且没有明确定义(例如,digitalSignature 和 nonRepudiation 之间的区别是一个比互操作性更多的推测问题)。Extended Key Usage:这是一个开放式的“允许使用”列表,表示为OID。由于实际上存在无限可能的 OID,因此没有可能的扩展密钥用法的详尽列表。每个使用 X.509 证书的协议或标准都应该定义自己的扩展密钥用法;例如,时间戳权威机构使用 1.3.6.1.5.5.7.3.8(参见第 2.3 节)。
Microsoft 在他们自己的 CA 软件(“Active Directory 证书服务”)中认为标准扩展不够好,因此他们定义了另一个Application Policies名为这意味着它获得了额外的可选注释字段,ADCS 实际上并未填写这些字段。请注意,ADCS还将信息存储为标准扩展,因此这种非标准扩展的净效果是传播混乱。Extended Key UsageCertificate PoliciesExtended Key Usage
另一个试图传达使用限制的较旧的非标准扩展是netscape-cert-type扩展。这让我们回到了上世纪末的 Netscape Navigator 4.0 时代。一些 CA 仍然在其证书中包含此扩展,更多的是为了传统而不是实际的互操作性。
扩展的内容只有在所涉及的软件能够理解的范围内才会受到尊重。扩展可以标记为“关键”,这意味着允许不识别非关键扩展的实现忽略它,而未知的关键扩展必须触发无条件拒绝证书。这就是理论,当然,实践可能会有所不同。一些实现不尊重临界标志。其他忽略非关键扩展,即使他们识别它们。标准的措辞也不是很清楚:
一个非关键扩展如果不被识别可以被忽略,但如果它被识别则必须被处理。
一个实现可以通过忽略它的内容来声称它已经“处理”了一个扩展,因为在识别一个扩展和执行它的语义之间是有区别的。某些扩展使整个画面变得更加模糊,特别是CRL Distribution Points,其语义取决于扩展是否被标记为关键。
NSS Technical Note: 3, by Nelson B. Bolyard中总结了用于 TLS/SSL 的扩展。