Laravel+Ubuntu服务器Instamojo支付Webhook异常,SSL证书验证失败
解决Laravel站点Webhook SSL验证失败(UNABLE_TO_VERIFY_LEAF_SIGNATURE)问题
你遇到的这个UNABLE_TO_VERIFY_LEAF_SIGNATURE错误,核心原因是服务器的SSL证书链配置不完整。Namecheap的PositiveSSL属于中间证书签发的类型,如果只部署了域名证书,客户端(比如Postman、Instamojo的服务器)无法验证证书合法性,就会出现无法连接或验证失败的情况。下面是一步步的解决办法:
1. 生成完整的SSL证书链
先登录你的Namecheap账户,找到PositiveSSL订单的证书下载页面,通常会拿到三个证书文件:
- 你的域名专属证书(比如
your-domain.crt) - PositiveSSL中间证书(比如
PositiveSSLCA2.crt) - AddTrust根证书(比如
AddTrustExternalCARoot.crt)
在Ubuntu服务器上,把这三个文件按域名证书→中间证书→根证书的顺序合并成完整的证书链文件,执行命令:
cat your-domain.crt PositiveSSLCA2.crt AddTrustExternalCARoot.crt > fullchain.crt
2. 配置Web服务器(Nginx/Apache)
根据你使用的Web服务器,更新SSL配置:
如果你用Nginx:
- 打开站点的Nginx配置文件,一般路径是
/etc/nginx/sites-available/your-site.conf - 修改
ssl_certificate和ssl_certificate_key配置项:server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/your/fullchain.crt; ssl_certificate_key /path/to/your/private-key.key; # 其他SSL配置(协议、加密套件等)保持不变 } - 重启Nginx生效:
sudo systemctl restart nginx
如果你用Apache:
- 打开站点的SSL配置文件,比如
/etc/apache2/sites-available/your-site-ssl.conf - 更新证书相关配置:
<VirtualHost *:443> ServerName your-domain.com SSLCertificateFile /path/to/your/fullchain.crt SSLCertificateKeyFile /path/to/your/private-key.key # 其他SSL配置保持不变 </VirtualHost> - 重启Apache生效:
sudo systemctl restart apache2
3. 验证证书链是否正确
配置完成后,用openssl命令检查证书链状态:
openssl s_client -connect your-domain.com:443
在输出里找verify return:1,出现这个说明证书验证正常;如果是verify return:0,要检查合并的证书文件顺序是否正确。
4. 解除Laravel的CSRF限制
Laravel默认会对所有POST请求验证CSRF令牌,但Webhook请求(比如Instamojo的回调)不会携带这个令牌,需要把Webhook路由加入CSRF白名单:
打开app/Http/Middleware/VerifyCsrfToken.php,在$except数组里添加你的Webhook路由:
protected $except = [ '/your-instamojo-webhook-url', ];
5. 测试Webhook URL
完成以上步骤后,再用Postman访问你的Webhook URL,应该就能正常获取响应了。另外还要注意:
- Instamojo后台配置的Webhook URL必须是
https开头的完整地址 - 服务器防火墙要允许Instamojo的官方IP访问(可以参考Instamojo文档获取IP列表,添加到UFW或iptables规则里)
内容的提问来源于stack exchange,提问作者Sunny Kumar
相关产品推荐
相关产品推荐

