【问题标题】:Chilkat RSASSA-PSS signature problem with Powerbuilder 9.0.3 and Powerbuilder 12.6Powerbuilder 9.0.3 和 Powerbuilder 12.6 的 Chilkat RSASSA-PSS 签名问题
【发布时间】: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


【解决方案1】:

我创建了一些示例,并将在此处创建更多示例:https://www.example-code.com/powerbuilder/ibanity.asp

【讨论】:

  • 非常感谢,现在一切正常。事实上,根据您的示例,我改变了构建签名字符串的方式:我使用字符串变量代替 Chilkat StringBuilder。
【解决方案2】:

现在工作正常,实际上基于 Chlikat 示例,我更改了构建签名字符串的方式:我使用字符串变量代替 Chilkat StringBuilder 代替这个

// Step 4 - Build the signing string
ls_signing_string = "(request-target): "+ls_request_target+'\n'+&
"host: api.ibanity.com\n"+&
"digest: "+ls_digest+"\n"+&
"(created): "+ls_created+"\n"+&
"authorization: "+"Bearer "+is_token_isabel
...
ls_Signature = loo_Rsa.SignStringENC(ls_signing_string,"SHA-256")

我应该用这个

// Step 4 - Build the signing string
oleobject loo_SbSigningString
loo_SbSigningString = create oleobject
li_rc = loo_SbSigningString.ConnectToNewObject("Chilkat_9_5_0.StringBuilder")
loo_SbSigningString.Append("(request-target): ")
loo_SbSigningString.AppendLine(ls_Request_target,0)
loo_SbSigningString.Append("host: ")
loo_SbSigningString.AppendLine("api.ibanity.com",0)
loo_SbSigningString.Append("digest: ")
loo_SbSigningString.AppendLine(ls_digest,0)
loo_SbSigningString.Append("(created): ")
loo_SbSigningString.AppendLine(ls_Created,0)
loo_SbSigningString.Append("authorization: Bearer "+is_token_isabel)
..
ls_Signature = loo_Rsa.SignStringENC(loo_SbSigningString.GetAsString(),"sha-256")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多