svn服务器证书过期或不信任,核心解决办法是先清理本地认证缓存并重新接受新证书,若证书本身已失效则需要服务器端更新证书。
先分清“不信任”的三种常见场景
svn服务器报不信任,多数情况下不是服务器挂了,而是本地客户端和服务器之间的安全凭证出了问题,打开命令行执行svn update,看到 SSL certificate problem 或 Server certificate verification failed 这类提示,别急着怀疑人生,先对照下面三个场景定位。
- 证书过期:服务器端证书超出有效期,客户端校验时间戳后直接拒绝。
- 自签名证书不受信:服务器用的证书是自签的,没经过权威CA机构签发,客户端默认不认。
- 本地缓存了旧的证书指纹:服务器证书换过(比如重新部署、IP变更),但客户端缓存里还存着旧指纹,比对失败。
行业共识认为,前三者中缓存错乱导致的“假不信任”占相当大比例,不少团队折腾半天重装服务器,结果只是本地缓存文件作祟。
svn服务器不信任怎么办:先用命令行看清报错细节
遇到报错不要瞎试,先看完整输出,很多开发者只看最后一行“certificate verification failed”,忽略了前面的具体原因,执行以下命令复现问题:
svn update --username yourname
当svn提示证书信息时,注意查看这几处关键信息:
- 证书的生效和过期时间:
Valid from和Valid until,如果当前日期已超出Valid until,基本可以判定是证书过期。 - 证书颁发对象和颁发者:
Subject和Issuer,如果两者相同,就是自签名证书。 - 证书指纹:
MD5或SHA1指纹串,方便和服务器端实际证书比对。
在Windows上,按 Win + R 输入 cmd 打开命令行窗口,把svn命令路径加到环境变量里会方便很多,TortoiseSVN自带命令行工具,默认安装路径下就有 svn.exe,建议直接用它来诊断。
svn服务器证书过期怎么解决:服务器端更新证书
如果确认是证书本身过期,客户端再怎么折腾也没用,必须更新服务器端证书,整个操作分三步,缺一不可。
第一步:生成新证书(或续期)
以Apache SVN服务器为例,常见做法是用openssl生成自签名证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/subversion/svn.key -out /etc/subversion/svn.crt
如果公司有正式CA签发的证书,直接把新证书文件替换到服务器配置指定的路径,替换前先备份旧证书,出问题还能回滚。
第二步:修改SVN服务器配置
Apache环境下,编辑/etc/httpd/conf.d/subversion.conf(具体路径因系统而异),找到以下两行并替换为新的证书路径:
SSLCertificateFile /etc/subversion/svn.crt
SSLCertificateKeyFile /etc/subversion/svn.key
改完配置后,重载Apache服务:
systemctl reload httpd
第三步:强制验证服务器新证书
在服务器本机执行:
openssl s_client -connect localhost:443 -showcerts
确认输出的证书有效期起始日期是今天,说明切换成功,切换到现在的日期,意味着之前过期的旧证书已经被彻底替换。
证书没换但提示不信任:清理svn认证缓存
证书明明在有效期内,svn还是喊不信任,大概率是本地缓存了旧证书指纹,客户端把第一次连接时接受的证书指纹记在了本地,服务器证书一换,指纹对不上,svn就翻脸不认人,用下面的方法清掉旧缓存。
Windows下清理步骤(适用TortoiseSVN和命令行svn)
- 打开文件资源管理器,在地址栏输入
%APPDATA%Subversionauth,回车进入缓存目录。 - 进入
svn.simple子目录,里面存放的是所有历史认证缓存,包括服务器地址、用户名、证书指纹。 - 按时间排序,找到对应svn服务器IP或域名的文件,删除后重启TortoiseSVN。
- 如果拿不准是哪个文件,直接清空
svn.simple整个目录,客户端会重新认证所有仓库。
删除缓存后,下次执行 svn update 或 svn checkout 时,svn会重新弹出证书信任确认,输入 p(permanently)永久接受即可。
这个操作妙就妙在,不需要重启svn服务,也不用管理员权限,只影响当前电脑上的认证状态,多数情况下,这个操作可以当场解决问题,因为多数报错原本就是缓存造成,不是服务器真的换了证书。
Mac和Linux下清理命令
打开终端,输入以下命令:
rm -rf ~/.subversion/auth/svn.simple/
清理后,再连接svn服务器,会重新询问是否接受证书,输入 p 回车,永久信任该证书,顺手检查一下 ~/.subversion/servers 文件,有时候全局配置里写死了旧的ssl-authority-files,也需要同步更新。
| 操作系统 | 缓存目录 | 清理命令 |
|---|---|---|
| Windows | %APPDATA%Subversionauthsvn.simple |
手动删除文件 |
| Mac / Linux | ~/.subversion/auth/svn.simple |
rm -rf 命令 |
临时绕过证书验证的两种办法(仅限测试环境)
前面说的方法都是正路,但总有紧急情况,比如生产环境宕机,代码拉不下来,需要先绕过验证应急,注意,以下方法限制使用场景,公网环境绝不能用。
命令行svn绕过证书验证
修改 ~/.subversion/config(Windows是 %APPDATA%Subversionconfig)文件,找到 [global] 段落,加入以下配置:
ssl-server-trust-policy = never
或者用 svn 命令行参数直接指定:
svn update --non-interactive --trust-server-cert-failures=unknown-ca,cn-mismatch,expired,not-yet-valid
这种方法会把所有证书检查全关掉,安全性等于裸奔,内网测试环境临时用一下可以,强烈不建议在含有敏感代码的仓库上开启。
TortoiseSVN图形界面下处理自签名证书
TortoiseSVN在连接时遇到证书警告,会弹出提示框显示证书详细信息,点击 Accept permanently 按钮,即可信任该自签名证书,如果之前误点了 “Reject”,需要找托盘区的TortoiseSVN设置,进入 Settings → Saved Data,点 Clear 清空认证缓存。
svn服务器更换地址后报错怎么办
这里的情况更隐蔽,svn服务器地址变了(比如从 http://192.168.1.10/svn 换到 https://svn.company.com/svn),本地缓存里还存着旧地址的证书信息,处理方法只有一个:找到 svn.simple 目录,把涉及旧地址的条目全部删除,然后重新 svn switch --relocate 到新地址,操作时注意,svn switch --relocate 是老命令,新版svn不推荐使用,直接 svn switch 一次即可。
证书正常但仍报不信任:排查系统时间和根证书链
这是最容易被忽视的场景,清理完缓存、确认证书在有效期内,svn还是一直报不信任,要检查以下两方面。
系统时间严重偏差
客户端电脑的系统时间比当前时间差了好几天甚至几个月,证书的生效日期在未来,svn会认为证书还未生效,执行 date 查看当前系统时间,如果不对劲,同步一下网络时间:
- Windows:设置 → 时间和语言 → 自动设置时间
- Mac/Linux:
sudo ntpdate ntp.aliyun.com
时间校准后,再执行一次 svn update,不信任问题瞬间消失,这个情况的最坑之处在于,连服务端的报错都是“证书验证失败”这同一句话,你根本无法区分是系统时间的问题还是证书本身的问题除非你像我一样排完所有可能才查时间。
中间证书链缺失
服务器只配置了站点证书,没有把中间CA证书一并配置进去,部分客户端会报“证书链不完整”,检查Apache配置,确认 SSLCertificateChainFile 指令指向了正确的中间证书文件,这也是内网自建CA最常出现的配置错误。
实操案例:一套完整排查流程走下来需要几分钟
假设你的svn仓库地址是 svn://192.168.1.100/repo,突然所有客户端都报不信任,别慌,按时间顺序从短到长做如下四步。
- 先看服务端证书状态:在服务器上执行
openssl s_client -connect 127.0.0.1:443 -showcerts | grep "Not After",确认证书是否过期。 - 再查服务端配置:确认证书路径没被改过,
SSLCertificateFile指向的文件存在且完整。 - 单台客户端清理缓存:删掉
svn.simple里的对应条目,重新认证。 - 大面积报错重新走1-3步:如果清缓存后仍然报错,回到第1步重查,大概率是证书本身有问题。
整套排查流程控制在10分钟以内,如果超过这个时间还没定位到问题,建议检查系统时间。
常见问题速查
svn服务器证书过期怎么解决?
登录服务器,用openssl生成新证书或向CA申请续期,替换Apache配置中的证书文件路径,重载服务,客户端这边删除本地 svn.simple 缓存,重新连接时接受新证书,整个过程大概5分钟。
svn服务器不信任怎么办?
先执行 svn update 看完整报错,区分三种情况:证书过期就更新服务器证书;自签名证书就客户端手动接受;缓存指纹对不上就清理本地认证缓存,操作优先级从客户端清理开始,因为它最快且不需要动服务器。
改了svn服务器地址后报证书不信任,和上面问题有关系吗?
有关系,这是缓存和证书指纹同时不匹配导致的,删掉 svn.simple 目录下旧地址的缓存记录,重新指向新地址完成一次checkout或update,客户端会重新记录新地址的证书指纹,问题即可解决。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/739466.html





