关于X.509证书x5t#s256指纹计算规范的技术问询
正确的x5t#s256计算方式(符合JWS规范)
直接对SHA-256哈希生成的原始32字节数组进行base64url编码,才是符合JWS规范的正确方式。
规范依据
JWS规范对x5t#s256的定义明确说明:
"x5t#S256"(X.509证书SHA-256指纹)头参数是对用于数字签名JWS的密钥对应的X.509证书的DER编码进行SHA-256哈希(又称摘要)后,进行base64url编码得到的值。注意证书指纹有时也被称为证书印记,该头参数为可选参数。
错误方式的问题
你提到的先将哈希字节转十六进制字符串再编码的流程不符合规范:
- 十六进制字符串是原始哈希字节的文本表示,本质是把每个字节转换成两个字符,已经改变了原始数据的形态
- 对十六进制字符串做base64url编码,最终结果和直接编码原始字节数组完全不同,违背了规范中“对哈希结果进行base64url编码”的核心要求
正确计算步骤
- 提取X.509证书的DER编码字节流
- 对该字节流计算SHA-256哈希,得到32字节的原始哈希值
- 直接对这32字节执行base64url编码(无需填充),得到的结果就是合法的x5t#s256值
内容的提问来源于stack exchange,提问作者Thamindu DJ
相关产品推荐
相关产品推荐

