首先了解一下SSL证书中的密钥用途(Key Usage)和扩展密钥用途(Extended Key Usage, EKU)是两种不同的X.509证书扩展字段,用于限制证书中公钥的使用范围。它们在证书的安全策略中扮演重要角色,但功能和目的有所不同。下面我具体说一下:
1. 密钥用途(Key Usage)
定义:
密钥用途是X.509证书的核心扩展字段,定义了证书中的公钥可以执行哪些基础密码学操作。它是一个位掩码(Bitmask),允许多个用途组合。
常见用途(RFC 5280定义):
digitalSignature:用于生成数字签名(如TLS握手签名)。
nonRepudiation(或contentCommitment):防止签名者否认签名(如电子邮件签名)。
keyEncipherment:加密对称密钥(如RSA密钥交换)。
dataEncipherment:直接加密数据(较少使用)。
keyAgreement:用于密钥协商协议(如ECDH)。
keyCertSign:用于签发其他证书(CA证书必须包含此项)。
crlSign:用于签发证书吊销列表(CRL)。
encipherOnly/decipherOnly:配合keyAgreement限制密钥用途。
作用:
强制约束:明确密钥的最低安全能力,例如禁止加密密钥用于签名。
安全策略:防止密钥被误用(如CA证书的私钥不能用于服务器认证)。
2. 扩展密钥用途(Extended Key Usage, EKU)
定义:
扩展密钥用途是X.509证书的可选扩展字段,用对象标识符(OID)定义公钥的具体应用场景。它是对密钥用途的补充,提供更细粒度的限制。
常见用途(OID示例):
serverAuth (1.3.6.1.5.5.7.3.1):用于TLS服务器认证。
clientAuth (1.3.6.1.5.5.7.3.2):用于TLS客户端认证。
codeSigning (1.3.6.1.5.5.7.3.3):用于代码签名。
emailProtection (1.3.6.1.5.5.7.3.4):用于电子邮件加密和签名。
timeStamping (1.3.6.1.5.5.7.3.8):用于时间戳服务。
其他自定义场景(如文档签名、IoT设备认证等)。
作用:
场景限定:限制证书只能用于特定协议或服务(如仅允许作为服务器证书)。
兼容性:某些协议(如OCSP)强制要求特定EKU。
3. 区别与联系
密钥用途(Key Usage)定义密钥的基础密码学操作,位掩码(Bitmask),通常必须存在(某些CA可能省略),底层操作限制(如签名、加密),EKU可能需要Key Usage的支持.
扩展密钥用途(EKU),定义密钥的具体应用场景,对象标识符列表(OID List),可选扩展,高层应用限制(如服务器认证),依赖Key Usage的底层权限.
4. 实际应用示例
场景1:TSL服务器证书
Key Usage:至少包含 digitalSignature(用于TLS握手签名)和 keyEncipherment(RSA密钥交换)或 keyAgreement(ECDH密钥协商)。
EKU:必须包含 serverAuth,否则浏览器可能拒绝连接。
场景2:客户端证书
Key Usage:需要 digitalSignature。
EKU:必须包含 clientAuth。
场景3:代码签名证书
Key Usage:需要 digitalSignature。
EKU:必须包含 codeSigning。
5. 注意事项
1. 冲突处理:
如果同时指定了Key Usage和EKU,两者必须一致。例如,若EKU为serverAuth,Key Usage必须包含digitalSignature或keyAgreement。
若Key Usage未包含必要权限,即使EKU正确,证书也会被拒绝。
2. 默认行为:
如果未指定EKU,证书可能被允许用于任意用途(依赖验证方的策略)。
3. 安全风险:
过度宽松的Key Usage(如允许keyCertSign)可能导致私钥被滥用于签发恶意证书。
Key Usage 是底层密码学操作的“能力清单”,定义密钥能做什么。
EKU 是高层应用场景的“白名单”,定义密钥能用在哪些场景。
上面就是SSL正书两种秘钥功能,单两者需协同配置,确保证书既具备所需能力,又被限制在目标用途内。