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

如何将eBay PKCS#8格式Ed25519私钥适配Python签名代码?

解决eBay REST API数字签名215122错误的排查方案

1. 私钥提取正确性验证

先确认从PKCS#8格式提取的32字节Ed25519私钥完全正确:

  • 使用OpenSSL命令提取时,确保无额外字符干扰:
    openssl pkcs8 -in ebay_private_key.p8 -nocrypt -topk8 -outform PEM | grep -v "BEGIN PRIVATE KEY" | grep -v "END PRIVATE KEY" | tr -d '\n' | base64 -d | head -c 32 | xxd -p
    
  • 提取后,用Ed25519公钥派生逻辑(从私钥前32字节生成公钥),对比eBay密钥管理API返回的公钥,确保两者一致——这一步能排除私钥提取错误。

2. 待签内容(Signed Content)严格匹配eBay规范

eBay对签名的待签内容格式要求极严,必须完全符合以下规则:

  • 按照signature-input头中声明的组件顺序拼接,比如指定@method @path @authority,就必须按顺序拼接:
    GET
    /sell/account/v1/account
    api.ebay.com
    
  • 注意细节:HTTP方法必须大写,路径要包含完整API端点(不能省略前缀),权威部分是api.ebay.com(不带https://和端口),组件之间用换行分隔,末尾不能多加分隔符。
  • 若请求包含body(比如POST/PUT),需确保body的哈希值(如果signature-input中包含@request-target或body组件)计算正确,且编码为Base64url格式。

3. VBA中签名编码与请求头检查

  • Ed25519生成的64字节二进制签名,必须转换为Base64url编码(替换+为-、/为_,去除末尾所有=),不能用标准Base64。
  • 确认x-ebay-signature-key头的值是eBay返回公钥的Base64url编码,而非原始字节或标准Base64。
  • 检查signature-input中的keyid与eBay密钥的keyId完全一致(区分大小写),created和expires为UTC时间戳(建议设置5-10分钟有效期,避免时间同步问题)。

4. 本地复现与请求发送验证

  • 把VBA中生成的待签内容、签名、公钥导出,用RFC8032的Python代码做验证:如果本地验证通过但eBay报错,大概率是VBA发送请求时的编码问题——比如待签内容是否用UTF-8编码,请求头是否存在额外空格或换行。
  • 抓包对比请求头:确保signature-input和signature头没有被VBA的HTTP库自动转义或添加额外字符。

内容的提问来源于stack exchange,提问作者ecom-tech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:05:15