支付宝,openssl_sign(): supplied key param cannot be coerced into a private key

2018/01/27 08:46 于 技术

微信 微博 豆瓣 人人

这篇文章前提排除了openssl自身的问题(好多年没有写东西,应该咋说?)

新版本的支付宝API不再用老的MD5进行签名,出现这个问题后
检查配置文件中的私钥是否是一行乱码(不带-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----)
如果没问题,那就注意一下,可能是下面这个情况:
你用他自己的生成工具生成的公钥和私钥,是否用的PHP但是选成了Java用的用一种padding对私钥进行了填充的选项(那个PKCS8Java用,非PKCS1Java用)

为什么会出现这个脑残的原因,也不会有人往这上面考虑的原因在哪:

选择PKCS8处理后的私钥,在windows上和openssl1.0.0版本上面是可以通过openssl_sign()的,没有问题可以签名成功。
但是在低版本的openssl上要出现openssl_sign(): supplied key param cannot be coerced into a private key

所以,
生成一对正确的秘钥就可以了。
也可以用你服务器上的openssl生成然后填充。

支付宝新API官方的SDK太臃肿了,又不是阿里云那种一堆服务,再说连阿里云的SDK也不只带runtime啊................,如果仅仅用一两个功能的话,最好自己简化一下。