RFC 7515 - Appendices (附录)
本文档包含RFC 7515 JSON Web Signature (JWS)规范的附录部分。
Appendix A. JWS Examples (JWS示例)
本附录提供了使用不同算法的JWS完整示例。详细内容请参见Appendix A。
A.1 Example JWS Using HMAC SHA-256
使用HMAC SHA-256算法的完整JWS示例,包括编码和验证步骤。
A.2 Example JWS Using RSASSA-PKCS1-v1_5 SHA-256
使用RSA签名算法RSASSA-PKCS1-v1_5 SHA-256的完整示例。
A.3 Example JWS Using ECDSA P-256 SHA-256
使用椭圆曲线数字签名算法ECDSA P-256 SHA-256的示例。
A.4 Example JWS Using ECDSA P-521 SHA-512
使用更高安全级别的ECDSA P-521 SHA-512算法示例。
A.5 Example Unsecured JWS
无签名JWS示例,演示alg为none的情况。
A.6 Example JWS Using General JWS JSON Serialization
使用通用JWS JSON序列化格式的示例,展示多个签名的能力。
A.7 Example JWS Using Flattened JWS JSON Serialization
使用扁平化JWS JSON序列化格式的示例。
Appendix B. "x5c" (X.509 Certificate Chain) Example
X.509证书链示例,展示如何在JWS头部使用x5c参数。详细内容请参见Appendix B。
本附录提供了一个完整的X.509证书链JSON数组示例,可作为x5c(X.509 certificate chain) Header Parameter的值使用。
Appendix C. Notes on Implementing base64url Encoding without Padding
关于实现无填充base64url编码的注意事项。详细内容请参见Appendix C。
Key Points (要点)
- 说明如何基于标准的带填充base64编码函数实现无填充的base64url编码
- 提供C#代码示例,展示编码和解码实现
- 解释填充字符的计算规则
填充规则 (Padding Rules):
- 长度 mod 4 = 0: 无需填充
- 长度 mod 4 = 2: 添加两个
= - 长度 mod 4 = 3: 添加一个
= - 长度 mod 4 = 1: 格式错误
Appendix D. Notes on Key Selection
密钥选择的注意事项。详细内容请参见Appendix D。
Key Selection Algorithm (密钥选择算法)
本附录描述了一组用于选择密钥的可能算法,这些密钥用于:
- 验证JWS的数字签名或MAC
- 解密JWE
密钥选择步骤:
-
收集潜在适用的密钥集
- 应用协议提供的密钥
- 通过
jku(JWK Set URL)头参数引用的密钥 - 通过
jwk(JSON Web Key)头参数提供的密钥 - 通过
x5u(X.509 URL)头参数引用的密钥 - 通过
x5c(X.509 certificate chain)头参数提供的密钥 - 应用可用的其他密钥
-
过滤收集的密钥集
- 根据
kid(key ID)或x5t(X.509 thumbprint)参数过滤 - 检查JWK的
alg(算法)、use(公钥用途)或key_ops(密钥操作)参数 - 应用特定的过滤规则
- 根据
-
对收集的密钥集排序
- 优先尝试通过
kid或x5t引用的密钥 - 根据特定成员值排序
- 优先尝试通过
-
对密钥做出信任决策
- 评估密钥来源
- 验证TLS证书
- 检查X.509证书链的有效性
-
尝试签名/MAC验证或解密
- 使用收集、过滤和/或排序的密钥
- 可能限制尝试的密钥数量
- 成功验证或解密后终止
Appendix E. Negative Test Case for "crit" Header Parameter
crit头参数的反面测试用例。详细内容请参见Appendix E。
Purpose (目的)
演示符合规范的实现必须拒绝包含不理解的关键扩展的输入。
Test Case (测试用例)
以下JWS必须被所有实现拒绝,因为它使用了扩展头参数名http://example.invalid/UNDEFINED,而实现不理解该参数。
JWS Protected Header:
{
"alg":"none",
"crit":["http://example.invalid/UNDEFINED"],
"http://example.invalid/UNDEFINED":true
}
Complete JWS (必须被拒绝):
eyJhbGciOiJub25lIiwNCiAiY3JpdCI6WyJodHRwOi8vZXhhbXBsZS5jb20vVU5ERU
ZJTkVEIl0sDQogImh0dHA6Ly9leGFtcGxlLmNvbS9VTkRFRklORUQiOnRydWUNCn0.
RkFJTA.
Appendix F. Detached Content
分离内容。详细内容请参见Appendix F。
Concept (概念)
在某些情况下,对不包含在JWS中的内容进行完整性保护是有用的。
Method (方法)
- 使用内容的表示作为载荷创建JWS
- 从JWS中删除载荷表示
- 将修改后的对象发送给接收方
对于JWS Compact Serialization:
- 用空字符串替换第二个字段(包含
BASE64URL(JWS Payload))
对于JWS JSON Serialization:
- 删除
payload成员
Reconstruction (重构)
接收方通过将载荷表示重新插入修改后的对象来重构JWS,然后以通常方式使用生成的JWS。
Implementation Note (实现注意事项)
此方法无需JWS库的特殊支持,应用程序可以通过修改标准JWS库的输入和输出来使用此方法。
Acknowledgements (致谢)
JSON内容签名的解决方案之前由Magic Signatures、JSON Simple Sign和Canvas Applications等项目探索,这些项目都影响了本文档。
感谢Axel Nennker在JWS和JWE规范上的早期实现和反馈。
本规范是JOSE工作组的成果,包括数十位活跃和专注的参与者。特别是以下个人贡献了影响本规范的想法、反馈和措辞:
Dirk Balfanz, Richard Barnes, Brian Campbell, Alissa Cooper, Breno de Medeiros, Stephen Farrell, Yaron Y. Goland, Dick Hardt, Joe Hildebrand, Jeff Hodges, Russ Housley, Edmund Jay, Tero Kivinen, Ben Laurie, Ted Lemon, James Manger, Matt Miller, Kathleen Moriarty, Tony Nadalin, Hideki Nara, Axel Nennker, John Panzer, Ray Polk, Emmanuel Raviart, Eric Rescorla, Pete Resnick, Jim Schaad, Paul Tarjan, Hannes Tschofenig, Sean Turner。
Jim Schaad和Karen O'Donoghue担任JOSE工作组主席,Sean Turner、Stephen Farrell和Kathleen Moriarty在本规范创建期间担任安全领域主管。
Authors' Addresses (作者地址)
Michael B. Jones
Microsoft
Email: [email protected]
URI: http://self-issued.info/
John Bradley
Ping Identity
Email: [email protected]
URI: http://www.thread-safe.com/
Nat Sakimura
Nomura Research Institute
Email: [email protected]
URI: http://nat.sakimura.org/