rsa - Powerbuilder 9.0.3 和 Powerbuilder 12.6 的 Chilkat RSASSA-PSS 签名问题
问题描述
我们在 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 Mask
- 生成算法: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: DllDate: Feb 12 2018 ChilkatVersion: 9.5.0.72 UnlockPrefix: BEWANB.CB1042019 Architecture: Little Endian; 32 位语言:ActiveX VerboseLogging:1 toPrivKeyXml:toRsaPrivateKeyXml:toRsaPkcs1PrivateKeyDer:(leaveContext)DecodeToAsn:(leaveContext)(leaveContext)(leaveContext)importPrivateKey:loadAnyString:loadAnyXml:loadAnyXml:(leaveContext)(leaveContext)(leaveContext)(leaveContext)成功. (leaveContext 15ms) SignStringENC: DllDate: Feb 12 2018 ChilkatVersion: 9.5.0.72 UnlockPrefix: BEWANB.CB1042019 Architecture: Little Endian; 32 位语言:ActiveX VerboseLogging:1 hashAlgorithm:SHA-256 字符集:windows-1252 组件使用购买的解锁代码成功解锁。inputBytesQP: (request-target): get /isabel-connect/account-reports?offset= 3D 0&size= 3D100=
\n主机:api.ibanity.com\n摘要:SHA-512=3Dz4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXc=
g/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg= 3D = 3D \n(已创建):16=
15285438\nauthorization: Bearer access_token_1615285439 hashAndSign: modulus_bitlen: 2048 hashBytes: 070D CF6B 85D6 ACE2 971F 20B3 29A0 439A FE36 9394 0D1C 10E7 513B 1447 F04D 39B2 padAndSignHash: keyType: Private hashInSize: 32 padding: PSS hashAlg: SHA-256 pss_encode: emLen: 256 autoSelectedSaltLen: 32 (leaveContext) (leaveContext 31ms) byteOrder: LittleEndian (leaveContext 47ms) signature: Te3sMFkvo26Mi5pkLsB8AwAJYynlB3xKU1Dy2AyPS4GlF1fUgTU4k5dU3mSu2dkJEbvmkUd+aPuwo+51AyNarcD7vGtFp/ze3vjCB87lZ+qrzDquEpVUNOb6tOq467odIeGPAsj4b9sa6JsdXciEGKPIZgC8+7zojm87f2MdAVVkDXTwFq7nmI+Q5czGlswLpihYn4VF+5ateKDInl1TdiekujmBh5ffkZAE43LZQX4UWIhqqlak7p2P9GyhF9n3RQRZ55Tp25vOWgPdnwz90OKnQR5aWtcHoVY+JuIl0VX49UFELU+L/Xz9tOGnilA7UcKElWMXVzcEqo3KLcGUWQ== Success. (leaveContext 47ms)ImportPrivateKeyObj:DllDate:2018 年 2 月 12 日 ChilkatVersion:9.5.0.72 UnlockPrefix:BEWANB。CB1042019 架构:小端;32 位语言:ActiveX VerboseLogging:1 toPrivKeyXml:toRsaPrivateKeyXml:toRsaPkcs1PrivateKeyDer:(leaveContext)DecodeToAsn:(leaveContext)(leaveContext)(leaveContext)importPrivateKey:loadAnyString:loadAnyXml:loadAnyXml:(leaveContext)(leaveContext)(leaveContext)(leaveContext)成功. (leaveContext 31ms) SignStringENC: DllDate: Feb 12 2018 ChilkatVersion: 9.5.0.72 UnlockPrefix: BEWANB.CB1042019 Architecture: Little Endian; 32 位语言:ActiveX VerboseLogging:1 hashAlgorithm:SHA-256 字符集:windows-1252 组件使用购买的解锁代码成功解锁。inputBytesQP: (request-target): get /isabel-connect/account-reports?offset=3D0&size=3D100= toRsaPkcs1PrivateKeyDer: (leaveContext) DecodeToAsn: (leaveContext) (leaveContext) (leaveContext) importPrivateKey: loadAnyString: loadAnyXml: loadAnyXml: (leaveContext) (leaveContext) (leaveContext) (leaveContext) 成功。(leaveContext 31ms) SignStringENC: DllDate: Feb 12 2018 ChilkatVersion: 9.5.0.72 UnlockPrefix: BEWANB.CB1042019 Architecture: Little Endian; 32 位语言:ActiveX VerboseLogging:1 hashAlgorithm:SHA-256 字符集:windows-1252 组件使用购买的解锁代码成功解锁。inputBytesQP: (request-target): get /isabel-connect/account-reports?offset=3D0&size=3D100= toRsaPkcs1PrivateKeyDer: (leaveContext) DecodeToAsn: (leaveContext) (leaveContext) (leaveContext) importPrivateKey: loadAnyString: loadAnyXml: loadAnyXml: (leaveContext) (leaveContext) (leaveContext) (leaveContext) 成功。(leaveContext 31ms) SignStringENC: DllDate: Feb 12 2018 ChilkatVersion: 9.5.0.72 UnlockPrefix: BEWANB.CB1042019 Architecture: Little Endian; 32 位语言:ActiveX VerboseLogging:1 hashAlgorithm:SHA-256 字符集:windows-1252 组件使用购买的解锁代码成功解锁。inputBytesQP: (request-target): get /isabel-connect/account-reports?offset=3D0&size=3D100= 2018 年 2 月 12 日 Chilkat 版本:9.5.0.72 解锁前缀:BEWANB.CB1042019 架构:Little Endian;32 位语言:ActiveX VerboseLogging:1 hashAlgorithm:SHA-256 字符集:windows-1252 组件使用购买的解锁代码成功解锁。inputBytesQP: (request-target): get /isabel-connect/account-reports?offset=3D0&size=3D100= 2018 年 2 月 12 日 Chilkat 版本:9.5.0.72 解锁前缀:BEWANB.CB1042019 架构:Little Endian;32 位语言:ActiveX VerboseLogging:1 hashAlgorithm: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\nauthorization: Bearer access_token_1615287272 hashAndSign: modulus_bitlen: 2048 hashBytes: B22B C9AF 7041 43E4 1CFE 5898 C88C C9CE 95FC B536 AC75 1F21 996C 7E7A 7B19 80EF padAndSignHash: keyType: Private hashInSize: 32 padding: PSS hashAlg: SHA-256 pss_encode: emLen: 256 autoSelectedSaltLen: 32 (leaveContext) (leaveContext 31ms) byteOrder: LittleEndian (leaveContext 31ms) signature: 0b/fLp4xbSaGqrH7HXsP8bRuhtr9xo7oPiY1+ryhVuR4vDCdCRFc2As6RX2SazS2T2MK4P966TX1rr5Qx2VnDYN0JL6ZnZAiR/P+ILP19bJN9+f6Jv1nfmgSOUB/stxeLKNlibeMXaR6+heX/ccGY807r8MdEk3hGFwlkK611GjrHoNTH+vge2ReQo8lKBaVP1QIHCvwXUVS39GdABHFLxTQ8La514YX8qruJp6i69lDfCvh4P9rOl5pebMwknyEjJ2rs0D40MUU8z+hM5bm+hSD100S7Ww9sDwObitn4FftR60fee/f3vf9qCv0wkBTBbVP8DTR4vbpKxv/oUNXFQ== Success. (离开上下文 31 毫秒)
我们从 Isabel API 收到此错误:
{"errors":[{"code":"invalidSignature","detail":"无法验证HTTP签名。请参考https://documentation.ibanity.com/http-signature","meta": {}}]}
这也是原始的签名字符串:
(请求目标):获取/isabel-connect/account-reports?offset=0&size=100\n主机:api.ibanity.com\ndigest:SHA-512=z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==\n : 1615287272\n授权: Bearer access_token_1615287272
提前感谢您的任何帮助或建议。
问候。
盖伊
解决方案
我创建了一些示例,并将在此处创建更多示例: https ://www.example-code.com/powerbuilder/ibanity.asp
推荐阅读
- python - 如何修复:KeyError:“[Index([...], dtype='object')] 都在 [columns] 中”
- flutter - 使用 Http 的 SearchDelegate
- java - 在回收站视图中组织两种视图类型
- c# - 如何为代码的有限部分使用命名空间
- line-breaks - Pango 换行
- android - 如何更新、插入和删除 Sqlite 中的行?
- git - Git 说“已经是最新的”但是没有文件
- firebase - Firebase 索引“订单”:“数组”
- php - 如何告诉 PhpStorm 定义了某个变量
- spring - 两个项目之间的公共实体