alipay icon indicating copy to clipboard operation
alipay copied to clipboard

打包成容器后报错误:crypto/rsa: verification error

Open hrf304 opened this issue 5 years ago • 7 comments

在本地系统可以正常响应(windows和ubuntu)都试过。但是打包成容器(alpine为基础镜像)的时候报crypto/rsa: verification error;是否需要装其他库

hrf304 avatar Dec 23 '19 15:12 hrf304

公钥和密码改成每行64字符也会报错

hrf304 avatar Dec 23 '19 15:12 hrf304

如果你用的 v3 ,是不是证书文件没有同步到 容器里面去。

smartwalle avatar Dec 24 '19 00:12 smartwalle

用的是普通公钥方式,私钥和公钥都是正确的。 另外发现容器在docker下是正常的,如果部署到k3s下就会出现那个错误

hrf304 avatar Dec 24 '19 08:12 hrf304

这样就太神奇了。。

smartwalle avatar Dec 24 '19 09:12 smartwalle

我在其它情况遇到了crypto/rsa: verification error错误,引起的原因是这样的:

  • notify.go中的函数GetTradeNotification中调用了VerifySign(req.Form),在大多数情况是正常的;
  • 如果notify_url中带有query参数,建议使用VerifySign(req.PostForm),因为req.Form会多出query参数,导致验签失败

不知道k3s下是否会在notify_url上附着了其它参数,导致req.Form数据增加,从而引发crypto/rsa: verification error。仅供参考。

我的临时解决办法:

  • 在调用GetTradeNotification前,我会修改req.ParseForm()用到的query信息,比如
    • req.URL.Path = "/"
    • req.URL.RawPath = "/"
    • req.URL.RawQuery = ""
  • 以保证GetTradeNotification()中的VerifySign(req.Form)正常验签

rosbit avatar Apr 11 '21 00:04 rosbit

@smartwalle @rosbit 同样遇到这个问题

sharper avatar Jun 10 '21 03:06 sharper

@sharper 参考 @rosbit 提供的方法试试

smartwalle avatar Jun 15 '21 00:06 smartwalle