You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mojo::UserAgent证书验证失败但LWP::UserAgent运行正常问题问询

问题根因
  • 本质是Let's Encrypt旧根证书DST Root CA X3过期的兼容问题:从调试日志可以明确看出,Mojo::UserAgent运行时验证证书链优先匹配了已经过期的DST Root CA X3,直接触发验证失败;LWP::UserAgent运行时正确匹配了有效的ISRG Root X1根证书,验证顺利通过。
  • 两个UA组件的默认CA证书来源不同:LWP::UserAgent默认调用系统级别的CA根证书库,目前主流操作系统的新版本都已经将过期的DST Root CA X3标记为不受信任,或者调整了根证书优先级,优先使用有效的ISRG根证书;而旧版本的Mojo::UserAgent默认使用自身携带的CA根证书包,该包还保留了过期的DST根证书且优先级更高,所以会触发验证错误。
解决思路
  • 方案1:配置Mojo::UserAgent使用系统CA证书库(最推荐)
    初始化UA后添加配置,指定系统CA证书的路径即可,不同操作系统的路径略有区别:
    $ua = Mojo::UserAgent->new();
    # Debian/Ubuntu 系列系统路径
    $ua->ca('/etc/ssl/certs/ca-certificates.crt');
    # CentOS/RHEL 系列系统路径
    # $ua->ca('/etc/pki/tls/certs/ca-bundle.crt');
    
    也可以通过设置环境变量MOJO_CA_FILE为对应系统路径实现全局生效,无需修改业务代码。
  • 方案2:升级Mojolicious版本
    升级Mojolicious到9.22及以上版本,官方已经更新了自带的CA证书包,移除了过期的DST Root CA X3,调整了根证书优先级,默认就可以正常验证Let's Encrypt签发的证书。
  • 方案3:临时跳过证书验证(仅测试用,禁止生产环境使用)
    初始化UA后开启不安全模式,跳过所有证书验证逻辑:
    $ua->insecure(1);
    

内容的提问来源于stack exchange,提问作者RabidMutant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:36:06