【发布时间】:2019-02-22 11:05:48
【问题描述】:
我想创建一个 X.509 公钥证书来验证签名,尤其是。 JWT 代币。
我想知道要将哪些属性和扩展属性设置为证书上的哪些值以限制 JWT 验证。
不幸的是,X.509 扩展的规范非常冗长。因此,我也非常感谢对可用 X.509 扩展、属性及其含义的简要概述。
【问题讨论】:
标签: certificate jwt digital-signature x509 pki
我想创建一个 X.509 公钥证书来验证签名,尤其是。 JWT 代币。
我想知道要将哪些属性和扩展属性设置为证书上的哪些值以限制 JWT 验证。
不幸的是,X.509 扩展的规范非常冗长。因此,我也非常感谢对可用 X.509 扩展、属性及其含义的简要概述。
【问题讨论】:
标签: certificate jwt digital-signature x509 pki
您需要强制执行此类限制的证书扩展类型是... Key Usage 和/或 Extended Key Usage 扩展。对于任何类型的数字签名,您至少需要名为... digitalSignature 的Key Usage,如RFC 5280 中所指定。标准(扩展)密钥用法扩展均在 RFC 的第 4.2.1.3 和 4.2.1.12 节中指定。
为了简单起见,您始终可以避免使用证书,方法是在 JWT 验证者端维护公钥(或指纹,如果您想优化内存/磁盘使用)的信任库(静态列表)。但这有一些限制,例如:
因此,如果这些限制影响到您,X.509 证书提供了一个更具可扩展性和灵活性的解决方案,但当然也增加了一层复杂性。有了证书,它的工作方式如下:
x5c 标头参数中包含签名者的证书(或证书链,如果您使用子 CA),以便验证者可以将证书(链)链接到受信任的 CA 之一。【讨论】:
CN=Token Signer 1),以确保他正在接收签名的对象由预期签名的一方,否则,从同一 CA 接收类似证书的其他实体可以生成具有您提到的所有属性的 JWT 并冒充预期的签名者。
使用非对称密钥的 JWT 签名和验证仅使用密钥对而不是证书来完成。只需要一个公钥来验证令牌签名。
公钥可以包含在证书中以便发送给验证方,但这并不是真正需要的,并且接收方没有义务对 X509 证书的任何属性或扩展执行验证可能有。
【讨论】: