使用cloud_sql_proxy连接Google Cloud SQL遇x509证书过期/无效错误
解决Cloud SQL Proxy的x509证书过期/无效问题
嗨,我来帮你搞定这个头疼的证书问题!你本地MySQL客户端能正常连接,但Cloud SQL Proxy却报x509: certificate has expired or is not yet valid,大概率是时间同步、proxy版本或者证书缓存的问题,咱们一步步来排查解决:
优先检查本地虚拟机的系统时间
这是最常见的触发原因!X509证书对时间精度要求很高,如果本地系统时间和实际UTC时间偏差过大(比如差了几个小时甚至几天),就会出现“证书未生效”或“已过期”的错误。- 先运行命令查看当前UTC时间:
date -u,手动对比一下真实的世界标准时间(比如搜“当前UTC时间”)。 - 如果时间不对,立刻同步系统时间:
- Ubuntu/Debian系统:
sudo timedatectl set-ntp on - CentOS/RHEL系统:
sudo systemctl start chronyd或者sudo ntpdate pool.ntp.org
- Ubuntu/Debian系统:
- 时间同步完成后,重启Cloud SQL Proxy再试。
- 先运行命令查看当前UTC时间:
更新到最新版Cloud SQL Proxy
旧版本的Proxy可能存在证书逻辑漏洞或者自带的根证书过期问题,直接换最新版试试:- 先停止当前运行的Proxy进程,删除旧的二进制文件。
- 根据你的系统架构下载最新版:
- Linux 64位:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
- Linux 64位:
- 给文件添加执行权限:
chmod +x cloud_sql_proxy - 用新的Proxy重新执行连接命令,比如:
./cloud_sql_proxy -instances=q:a:q4=tcp:3306
检查服务账号密钥是否过期
如果你是通过服务账号JSON密钥文件运行Proxy的,得确认密钥有没有过期:- 打开你的密钥JSON文件,找到
expiration字段,查看是否已过有效期。 - 如果密钥过期,登录Google Cloud控制台,进入IAM -> 服务账号页面,找到对应的账号重新生成并下载新的密钥,替换旧文件后重启Proxy。
- 打开你的密钥JSON文件,找到
强制Proxy重新获取证书
Proxy会缓存证书文件,有时候旧缓存会导致问题,手动清理缓存让它重新拉取:- 停止Proxy进程,删除缓存目录:
- Linux系统:
rm -rf ~/.cloudsql/ - Windows系统:手动删除
%USERPROFILE%\.cloudsql\目录下的所有内容
- Linux系统:
- 重新启动Proxy,它会自动从Google Cloud获取最新的有效证书。
- 停止Proxy进程,删除缓存目录:
确认Cloud SQL实例状态与SSL配置
- 登录Google Cloud控制台,检查你的Cloud SQL实例是否处于正常运行状态,有没有被暂停或正在维护。
- 进入实例的「Connections」->「SSL」页面,确认SSL配置是否正常(比如是否允许非SSL连接,不过你本地MySQL能连,这一步大概率没问题,但还是排查下更稳妥)。
如果以上步骤都试过还是不行,你可以启动Proxy时加上-verbose参数打印详细日志:./cloud_sql_proxy -instances=q:a:q4=tcp:3306 -verbose,从日志里能看到证书获取的完整过程,方便进一步定位问题。
内容的提问来源于stack exchange,提问作者Mirror Mirage
相关产品推荐
相关产品推荐

