You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenSSL创建符合PS256要求的RSA-PSS密钥及解决JWT验证问题

解决方案:PS256 JWT验证失败(RSA-PSS参数不匹配)

1. 确认OpenSSL生成的密钥参数正确性

先检查私钥的RSA-PSS配置是否符合要求,执行以下命令:

openssl pkey -in private.key -text -noout

输出中需确认以下字段:

  • Hash algorithm: sha256
  • Mask generation function: mgf1 with sha256
  • Salt length: 32
  • Trailer field: 0xbc

如果参数不符,重新生成密钥,使用正确的OpenSSL命令:

生成符合要求的私钥

openssl genpkey -algorithm RSA-PSS -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_pss_keygen_md:sha256 -pkeyopt rsa_pss_keygen_mgf1_md:sha256 -pkeyopt rsa_pss_keygen_saltlen:32 -pkeyopt rsa_pss_keygen_trailer_field:bc -out private.key

导出公钥

openssl pkey -in private.key -pubout -out public.pem

2. 修复jsonwebtoken的验证配置

jsonwebtoken默认的PS256参数可能与你生成的密钥不匹配,必须手动指定rsaPss配置项:

import jwt from 'jsonwebtoken';
import fs from 'fs';

const verifyPs256Token = (token: string) => {
  const publicKey = fs.readFileSync('./public.pem', 'utf8');
  try {
    const decoded = jwt.verify(token, publicKey, {
      algorithms: ['PS256'],
      rsaPss: {
        hash: 'sha256',
        mgf1Hash: 'sha256',
        saltLength: 32
      }
    });
    return decoded;
  } catch (err) {
    console.error('验证失败:', err);
    throw err;
  }
};

同时确保你的jsonwebtoken版本在9.0.0及以上,旧版本存在RSA-PSS支持缺陷,执行升级命令:

npm install jsonwebtoken@latest

3. 改用jose库验证(更可靠)

jose库对RSA-PSS算法的支持更原生,无需手动配置额外参数,代码更简洁:

import { jwtVerify, importSPKI } from 'jose';
import fs from 'fs';

const verifyPs256TokenWithJose = async (token: string) => {
  const publicKeyPem = fs.readFileSync('./public.pem', 'utf8');
  const publicKey = await importSPKI(publicKeyPem, 'PS256');
  const { payload } = await jwtVerify(token, publicKey);
  return payload;
};

4. 签名环节的参数匹配

确保签名时使用的参数与验证一致,以jsonwebtoken为例:

const signPs256Token = (payload: object) => {
  const privateKey = fs.readFileSync('./private.key', 'utf8');
  return jwt.sign(payload, privateKey, {
    algorithm: 'PS256',
    rsaPss: {
      hash: 'sha256',
      mgf1Hash: 'sha256',
      saltLength: 32
    }
  });
};

内容的提问来源于stack exchange,提问作者Maximilian Fixl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:41:18