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

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系统:
    1. 将根CA证书文件(如rootCA.pem)复制到/usr/local/share/ca-certificates/目录
    2. 执行更新命令:
      sudo update-ca-certificates
      
  • Windows系统:
    双击根CA证书,选择“安装证书”,按指引将其添加到“受信任的根证书颁发机构”存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:05:35