首先了解一下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正书两种秘钥功能,单两者需协同配置,确保证书既具备所需能力,又被限制在目标用途内。