【发布时间】:2021-03-09 13:01:19
【问题描述】:
我们在 Powerbuilder 9.0.3 应用程序(以及 powerbuilder 12.6)中使用 Chilkat 对 HTTP 请求进行签名,但这就像 Chilkat 生成的签名不被 Isabel 的 API 接受(我们已经联系过 Isabel,他们猜测那里是签名算法中的参数问题)。 Isabel API (https://documentation.ibanity.com/http-signature) 的文档说我们必须使用带有以下参数的 RSASSA-PSS 签名算法。
- 哈希算法:SHA-256
- 掩码生成函数:MGF1 掩码
- 生成算法:SHA-256
- 盐长度:32 字节(= 256 位,与哈希长度相同)
- 预告片字段:1
因此我们将 chilkat Rsa 组件设置如下:
loo_Rsa = create oleobject
li_rc = loo_Rsa.ConnectToNewObject("Chilkat_9_5_0.Rsa")
loo_Rsa.DebugLogFilePath = "c:\tmp\rsa.log"
loo_Rsa.VerboseLogging=1
li_Success=loo_Rsa.ImportPrivateKeyObj(loo_Privkey)
if li_Success <> 1 then
ls_error = "Error importPrivateKey: "+loo_Rsa.LastErrorText
destroy loo_Rsa
goto ee_error
end if
// Use RSA-PSS by setting OaepPadding = 1
loo_Rsa.OaepPadding = 1
loo_Rsa.OaepHash = "SHA-256"
loo_Rsa.EncodingMode = "base64"
ls_Signature = loo_Rsa.SignStringENC(ls_signing_string,"SHA-256")
根据 Isabel 文档,您认为我们在 Chilkat 中正确设置了 RSA 参数还是遗漏了什么? (我们也尝试过 LittleEndian = 0,但我们从 Isabel API 收到了同样的错误)。
这里是 chilkat 的日志供您参考:
在日志中,我看到 Chilkat 有时在签名字符串中的字符“=”之后添加了 3D 字符,这正常吗? (在下面的日志中,我将字符 3D 以粗体显示)
ImportPrivateKeyObj: 日期:2018 年 2 月 12 日 奇尔卡特版本:9.5.0.72 解锁前缀:BEWANB.CB1042019 架构:小端; 32 位 语言:ActiveX 详细记录:1 toPrivKeyXml: toRsaPrivateKeyXml: toRsaPkcs1PrivateKeyDer: (离开上下文) 解码到Asn: (离开上下文) (离开上下文) (离开上下文) 导入私钥: 加载任何字符串: 加载AnyXml: 加载AnyXml: (离开上下文) (离开上下文) (离开上下文) (离开上下文) 成功。 (离开上下文 15 毫秒) 签名字符串ENC: 日期:2018 年 2 月 12 日 奇尔卡特版本:9.5.0.72 解锁前缀:BEWANB.CB1042019 架构:小端; 32 位 语言:ActiveX 详细记录:1 哈希算法:SHA-256 字符集:windows-1252 使用购买的解锁码成功解锁了组件。 inputBytesQP: (request-target): get /isabel-connect/account-reports?offset=3D0&size=3D100=
\n主机:api.ibanity.com\n摘要:SHA-512=3Dz4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXc=
g/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg=3D=3D\n(已创建):16=
15285438\n授权:不记名 access_token_1615285439 哈希和签名: 模数位长度:2048 哈希字节:070D CF6B 85D6 ACE2 971F 20B3 29A0 439A FE36 9394 0D1C 10E7 513B 1447 F04D 39B2 padAndSignHash: 密钥类型:私有 哈希大小:32 填充:PSS 哈希算法:SHA-256 pss_编码: 时间长度:256 自动选择SaltLen:32 (离开上下文) (离开上下文 31 毫秒) 字节顺序:LittleEndian (离开上下文 47 毫秒) 签名:Te3sMFkvo26Mi5pkLsB8AwAJYynlB3xKU1Dy2AyPS4GlF1fUgTU4k5dU3mSu2dkJEbvmkUd + aPuwo + 51AyNarcD7vGtFp / ze3vjCB87lZ + qrzDquEpVUNOb6tOq467odIeGPAsj4b9sa6JsdXciEGKPIZgC8 + 7zojm87f2MdAVVkDXTwFq7nmI + Q5czGlswLpihYn4VF + 5ateKDInl1TdiekujmBh5ffkZAE43LZQX4UWIhqqlak7p2P9GyhF9n3RQRZ55Tp25vOWgPdnwz90OKnQR5aWtcHoVY + JuIl0VX49UFELU + L / Xz9tOGnilA7UcKElWMXVzcEqo3KLcGUWQ == 成功。 (离开上下文 47 毫秒) 导入私有密钥对象: 日期:2018 年 2 月 12 日 奇尔卡特版本:9.5.0.72 解锁前缀:BEWANB.CB1042019 架构:小端; 32 位 语言:ActiveX 详细记录:1 toPrivKeyXml: toRsaPrivateKeyXml: toRsaPkcs1PrivateKeyDer: (离开上下文) 解码到Asn: (离开上下文) (离开上下文) (离开上下文) 导入私钥: 加载任何字符串: 加载AnyXml: 加载AnyXml: (离开上下文) (离开上下文) (离开上下文) (离开上下文) 成功。 (离开上下文 31 毫秒) 签名字符串ENC: 日期:2018 年 2 月 12 日 奇尔卡特版本:9.5.0.72 解锁前缀:BEWANB.CB1042019 架构:小端; 32 位 语言:ActiveX 详细记录:1 哈希算法:SHA-256 字符集:windows-1252 使用购买的解锁码成功解锁了组件。 inputBytesQP: (request-target): get /isabel-connect/account-reports?offset=3D0&size=3D100=
\n主机:api.ibanity.com\n摘要:SHA-512=3Dz4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXc=
g/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg=3D=3D\n(已创建):16=
15287272\n授权:不记名 access_token_1615287272 哈希和签名: 模数位长度:2048 哈希字节:B22B C9AF 7041 43E4 1CFE 5898 C88C C9CE 95FC B536 AC75 1F21 996C 7E7A 7B19 80EF padAndSignHash: 密钥类型:私有 哈希大小:32 填充:PSS 哈希算法:SHA-256 pss_编码: 时间长度:256 自动选择SaltLen:32 (离开上下文) (离开上下文 31 毫秒) 字节顺序:LittleEndian (离开上下文 31 毫秒) 签名:0B / fLp4xbSaGqrH7HXsP8bRuhtr9xo7oPiY1 + ryhVuR4vDCdCRFc2As6RX2SazS2T2MK4P966TX1rr5Qx2VnDYN0JL6ZnZAiR / P + ILP19bJN9 + f6Jv1nfmgSOUB / stxeLKNlibeMXaR6 + HEX / ccGY807r8MdEk3hGFwlkK611GjrHoNTH + vge2ReQo8lKBaVP1QIHCvwXUVS39GdABHFLxTQ8La514YX8qruJp6i69lDfCvh4P9rOl5pebMwknyEjJ2rs0D40MUU8z + hM5bm + hSD100S7Ww9sDwObitn4FftR60fee / f3vf9qCv0wkBTBbVP8DTR4vbpKxv / oUNXFQ == 成功。 (leaveContext 31ms)
我们从 Isabel API 收到此错误:
{"errors":[{"code":"invalidSignature","detail":"无法验证HTTP签名。请参考https://documentation.ibanity.com/http-signature","元”:{}}]}
这里也是原始的签名字符串:
(请求目标):获取 /isabel-connect/account-reports?offset=0&size=100\n主机:api.ibanity.com\ndigest:SHA-512=z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaP (创建):1615287272\n授权:Bearer access_token_1615287272
提前感谢您的任何帮助或建议。
问候。
男人
【问题讨论】:
-
在您的日志中,有
charset: windows-1252跟踪。因为 Powerbuilder 是基于 Unicode 的(版本 10 或更高版本),这可能是个问题。尝试添加loo_rsa.Charset = "utf-8",只是一个想法! -
对不起,我忘了提到我使用的是 Powerbuilder 9.0.3。我尝试使用 loo_rsa.Charset = "utf-8" 但我仍然有错误:(
-
我也尝试过使用 utf-8 的 Powerbuilder 12.6,但我遇到了同样的错误
标签: rsa powerbuilder chilkat