问题根源是手机端微信的SSL验证比PC端更严格。

虽然您之前验证过证书,但PC端微信可能自动补全了中间证书,而手机端微信不会这样做。

一、根本原因:证书链不完整

      1.1 立即验证(关键)

在任意公网Linux服务器上执行(不要用您的本地机器):

# 测试新IP的证书链(这才是手机端微信看到的)
openssl s_client -connect 新IP地址:443 -servername yourdomain.com -showcerts

# 正常结果:应显示2-3个证书块(根证书+中间证书+域名证书)
# 异常结果:只显示1个证书块(仅域名证书,缺少中间证书)

或者使用在线检测工具:

# 访问 https://www.myssl.cn/tools/check-server-cert.html
# 输入您的域名,检查"证书链"是否完整

如果检测结果缺少中间证书,PC端微信可以访问,但手机端微信必然失败。

二、解决方案:配置完整证书链

1. 获取完整链证书

  • 阿里云/腾讯云:下载Nginx版本的证书包,其中 fullchain.pem 已包含中间证书

  • Certbot/Let's Encrypt:使用 fullchain.pem 而非 cert.pem

  • 手动合并:将中间证书内容追加到域名证书文件末尾

  • # 手动合并示例
    cat your.domain.crt intermediate.crt > fullchain.crt

    2. Nginx配置(必须)

  • server {
        listen 443 ssl;
        server_name yourdomain.com;
        
        # ✅ 正确:使用fullchain
        ssl_certificate /path/to/fullchain.crt;
        
        # ❌ 错误:仅使用域名证书
        # ssl_certificate /path/to/your.domain.crt;
        
        ssl_certificate_key /path/to/private.key;
    }

    3. 重启后验证

  • nginx -s reload
    
    # 再次检测,必须看到多个证书
    openssl s_client -connect yourdomain.com:443 -showcerts

    一句话总结

    PC端微信的SSL验证更宽松,手机端微信要求服务器必须返回完整证书链。请立即用 openssl s_client -showcerts 验证,80%的概率会发现自己确实缺少中间证书。

更多推荐