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

更换服务器后Google SSO登录失败:无法获取验证证书

问题描述

近期将服务器从Contabo更换为one.com VPS后,Google SSO登录功能失效(Microsoft SSO可正常使用)。密钥、域名均未变更,本地登录也正常。调用以下代码时出现错误:

$userInfoResponse = Google::getUserInfo($tokenResponse->idToken);
$authToken = AuthToken::findByIdentifierAndProvider($userInfoResponse->sub, EnumAuthTokenProvider::GOOGLE);

报错信息为:

"error":"Failed to retrieve verification certificates: 

其中$tokenResponse有返回值,但$userInfoResponse无返回值。目前约14000名使用Google登录的学生无法登录,且Google Cloud Console设置未做任何更改。

排查方向与解决方案

  • 服务器出站网络限制:one.com的VPS可能默认拦截了Google证书验证相关的HTTPS请求(如https://www.googleapis.com/oauth2/v3/certs、https://accounts.google.com/.well-known/openid-configuration)。在服务器上执行以下命令测试连通性:

    curl -v https://www.googleapis.com/oauth2/v3/certs
    

    如果请求超时或返回错误,联系one.com客服开放对应域名的出站权限,或检查服务器本地防火墙/安全组规则是否阻断了这些请求。

  • PHP CA证书配置缺失:新服务器的PHP环境可能未正确配置CA根证书,导致无法验证Google的HTTPS证书链,进而无法拉取验证证书。

    1. 下载最新的CA证书文件(如cacert.pem)
    2. 修改php.ini文件,设置:
      curl.cainfo = "/path/to/cacert.pem"
      openssl.cafile = "/path/to/cacert.pem"
      
    3. 重启PHP-FPM或Web服务器生效。
  • 系统时间偏差过大:服务器系统时间与标准时间偏差超过5分钟时,会导致Google ID Token的JWT验证失败(ID Token包含过期时间戳,时间偏差会触发有效性校验失败)。

    • 执行date命令查看服务器时间,对比实际标准时间
    • 使用NTP服务同步时间,例如:
      sudo apt-get install ntp
      sudo systemctl start ntp
      
  • OAuth客户端库缓存问题:如果使用的Google OAuth客户端库存在证书缓存机制,新服务器上可能残留无效缓存。

    • 清除库的缓存目录(具体路径取决于使用的库,例如Guzzle的缓存目录)
    • 重启PHP服务强制库重新拉取最新的验证证书
  • 透明代理拦截:one.com的VPS可能启用了透明代理,导致请求Google端点时被中间人拦截,证书验证失败。联系服务商确认是否存在这类网络配置,如有需要调整代理规则以允许正常访问Google OAuth相关端点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:27:07