使用cjwt库验证PS384算法JWT令牌失败求助
用cjwt库验证PS384算法JWT时出现RSA_PSS验证错误
我尝试用cjwt库验证头部为PS384算法的JWT令牌,参考了库自带的RS256算法示例程序(因为文档说明PS算法与RS算法几乎相同),但在jws_evp_openssl.c文件的EVP_DigestVerifyFinal(md_ctx, in->sig.data, in->sig.len)函数处触发错误:
- 错误代码:
67625094 - 错误信息:
error:0407E086:rsa routines:RSA_verify_PKCS1_PSS_mgf1:last octet invalid
排查与解决建议
- 确认签名格式与哈希匹配:PS384要求签名采用PKCS#1 PSS格式,且MGF1掩码生成函数必须使用SHA-384哈希算法。检查JWT签名Base64URL解码后的二进制数据是否符合该格式,避免编码错误。
- 替换所有哈希相关配置:修改RS256示例时,要把所有SHA256相关的配置替换为SHA384:
- 初始化EVP消息摘要上下文时,使用
EVP_sha384()替代EVP_sha256() - 通过
EVP_PKEY_CTX_set_rsa_mgf1_md()显式设置MGF1的哈希算法为SHA384
- 初始化EVP消息摘要上下文时,使用
- 核对公钥有效性:确保用于验证的公钥与签发JWT的私钥是配对的,且公钥PEM格式无误(无多余字符、换行正确)。
- 检查JWT头部正确性:确认JWT头部的
alg字段确实是PS384,无拼写错误,Base64URL解码后的JSON格式合法。
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

