Apache反向代理Gitea后Git Clone SSL证书验证失败解决求助
Git克隆Gitea仓库时SSL证书验证失败的解决方法(不关闭SSL验证)
问题背景
树莓派上部署Apache2作为反向代理,将Gitea(部署在NAS的Docker容器中)的请求转发至容器端口。Gitea网页功能正常,但执行git clone *GITEA_URL*/*username*/*repo*.git时,出现以下错误:
fatal: unable to access '*GITEA_URL*/*username*/*repo*.git': server certificate verification failed. CAfile: none CRLfile: none
Apache2核心配置片段
ServerSignature Off ServerTokens Prod Protocols h2 h2c http/1.1 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} # 缓存配置省略... ErrorDocument 404 *ERROR_URL* SSLCertificateFile /home/pi/server/Certificates/cert.pem SSLCertificateKeyFile /home/pi/server/Certificates/privkey.pem SSLCertificateChainFile /home/pi/server/Certificates/fullchain.pem # 其他虚拟主机省略... <VirtualHost *:3000> SSLEngine on ServerAlias *GITEA_URL* ErrorLog ${APACHE_LOG_DIR}/gitea_error.log CustomLog ${APACHE_LOG_DIR}/gitea_access.log combined ProxyRequests Off ProxyPreserveHost On ProxyVia Full <Proxy *> Require all granted </Proxy> SSLProxyEngine On <Location "/" > ProxyPass http://192.168.178.64:3333/ ProxyPassReverse http://192.168.178.64:3333/ </Location> </VirtualHost>
Gitea的app.ini配置片段
APP_NAME = Zokki's Gitea RUN_MODE = prod RUN_USER = git [repository] ROOT = /data/git/repositories [server] APP_DATA_PATH = /data/gitea DOMAIN = localhost SSH_DOMAIN = localhost HTTP_PORT = 3000 ROOT_URL = *GITEA_URL* DISABLE_SSH = false SSH_PORT = 22 SSH_LISTEN_PORT = 22 LFS_START_SERVER = true LFS_JWT_SECRET = pw OFFLINE_MODE = false [database] PATH = /data/gitea/gitea.db DB_TYPE = mysql HOST = 192.168.178.64:3307 NAME = gitea USER = gitea PASSWD = pw LOG_SQL = false SCHEMA = SSL_MODE = disable CHARSET = utf8
解决方案(不关闭SSL验证)
1. 确认Apache证书链配置完整
- 检查
SSLCertificateChainFile指向的fullchain.pem是否包含完整证书链(域名证书 + 所有中间CA证书),缺失中间证书会导致客户端无法验证证书合法性。 - 若使用Let's Encrypt证书,
fullchain.pem默认包含完整链,可直接使用;若为自签名/私有CA证书,需手动将中间CA证书追加到fullchain.pem中。
2. 配置Git单独信任该证书
将Apache使用的fullchain.pem复制到执行git clone的客户端机器,通过Git配置指定信任该证书:
- 全局配置(所有Git操作信任该证书):
git config --global http.sslCAInfo /path/to/copied/fullchain.pem - 单域名配置(仅对该Gitea域名生效,更安全):
替换git config --http.*GITEA_URL*.sslCAInfo /path/to/copied/fullchain.pem*GITEA_URL*为实际Gitea域名(如git.example.com)。
3. 确保Gitea ROOT_URL与访问URL一致
- 检查Gitea的
ROOT_URL配置是否和克隆时使用的URL完全匹配,包括协议(https://)和端口(非443端口需明确指定)。例如:
若克隆URL为https://git.example.com:3000/username/repo.git,则ROOT_URL应设置为https://git.example.com:3000/。
4. 将根CA证书添加到客户端系统信任库
如果使用私有CA颁发的证书,可将根CA证书添加到客户端系统信任存储,让所有系统程序(包括Git)自动信任:
- Linux系统:
- 将根CA证书文件(如
rootCA.pem)复制到/usr/local/share/ca-certificates/目录 - 执行更新命令:
sudo update-ca-certificates
- 将根CA证书文件(如
- Windows系统:
双击根CA证书,选择“安装证书”,按指引将其添加到“受信任的根证书颁发机构”存储。
内容的提问来源于stack exchange,提问作者Zokki
相关产品推荐
相关产品推荐

