扩展只是附在证书上的某种策略元数据。从技术上讲,无论扩展如何,证书都是一样的:将密钥链接到身份的文件。它的信息可以用于任何目的:验证服务器、客户端、签署其他证书、签署电子邮件、签署软件/驱动程序代码等。
这就是扩展发挥作用的地方:它们告诉应用程序哪些用法适用于此证书,因此当应用程序在未经授权的上下文中遇到证书时,它可以(或必须,取决于使用是否设置为关键)考虑证书无效并拒绝。
但是,此检查必须在应用程序级别完成。实施不佳的应用程序可能无法正确检查这些用法并随时接受任何证书。
此外,必须注意一些补充事项:
- 这些扩展只是限制。没有扩展名的证书允许在任何角色中使用(没有使用限制),而包含某些扩展名的证书仅限于这些扩展名定义的用途,
论文扩展实际上分为两个主要部分(加上一个仅仅是历史的):
- 密钥用法(例如您示例中的“不可否认”)定义了此证书允许的较低级别的加密用法,
- 扩展密钥用法提供了为此证书授权的更高级别的用法(您的示例中的“TLS Web 服务器身份验证”和“TLS Web 客户端身份验证”)。
- 一些应用程序还处理所谓的Netscape Cert Type,它可以看作是扩展密钥用法的先驱,并收集了诸如“SSL Server”、“SSL Client”等用法。
所有这些关键用法都可以关联起来并以互补的方式使用。
某些扩展可能被标记为“关键”:此标志确定应用程序无法识别/未实现特定扩展必须如何处理证书。在这种情况下,如果启用了“关键”标志,则应用程序必须拒绝证书,如果没有设置此标志,应用程序仍然可以接受证书。
扩展的密钥用法名称(以及 Netscape 证书类型)相当容易理解。然而,密钥的使用很大程度上取决于协议(在网络通信的情况下)将如何使用证书。SSL/TLS 客户端/服务器应用程序的常见关键用法如下:
- 服务器:数字签名、不可否认性、密钥加密、
- 客户端:数字签名、密钥加密、数据加密。
因此,要回答您编辑的问题:
具有“不可否认性”使用的证书是否允许使用/不使用“TLS Web 客户端身份验证”对所有客户端进行身份验证?
但是没有“不可否认”的“TLS Web 服务器身份验证”允许仅使用“TLS Web 客户端身份验证”使用来验证客户端?
服务器证书的“不可否认性”使用将主要由客户端软件检查,而不是由服务器检查,并且它不会影响服务器验证客户端证书的方式。
“TLS Web 客户端身份验证”的使用将阻止客户端的证书在服务器上下文中使用。它的缺席不会阻止任何身份验证。但是,如果客户端尝试使用不使用此用法但使用“TLS Web 服务器身份验证”的证书进行身份验证,那么身份验证很可能会被服务器拒绝。