手把手教你从OpenSSL开始,在CentOS/Ubuntu上编译一套支持HTTPS的Git(避坑libcurl链接错误)

张开发
2026/6/5 12:23:37 15 分钟阅读
手把手教你从OpenSSL开始,在CentOS/Ubuntu上编译一套支持HTTPS的Git(避坑libcurl链接错误)
从OpenSSL到HTTPS支持的GitCentOS/Ubuntu编译全指南当你在一台新配置的Linux服务器上尝试使用git clone命令时可能会遇到令人沮丧的错误提示fatal: Unable to find remote helper for https或Protocol https not supported or disabled in libcurl。这通常意味着系统自带的Git版本缺少对HTTPS协议的支持。本文将带你从OpenSSL开始一步步编译安装完整的Git工具链确保HTTPS功能正常工作。1. 环境准备与依赖安装在开始编译之前我们需要确保系统具备必要的编译工具和依赖库。不同Linux发行版的包管理命令有所不同以下是针对CentOS和Ubuntu的具体操作1.1 安装基础编译工具CentOS 7/8:sudo yum groupinstall Development Tools -y sudo yum install wget unzip zlib-devel perl-ExtUtils-MakeMaker gettext-devel -yUbuntu 18.04/20.04:sudo apt-get update sudo apt-get install build-essential wget unzip libz-dev libssl-dev gettext libcurl4-openssl-dev -y注意Ubuntu系统可能会提示某些包已是最新版本这通常不会影响后续操作。1.2 清理可能冲突的旧版本为了避免编译过程中出现库冲突建议先移除系统自带的旧版本开发包CentOS:sudo yum remove openssl-devel curl-devel -yUbuntu:sudo apt-get remove libssl-dev libcurl4-openssl-dev -y2. 编译安装OpenSSLOpenSSL是支持HTTPS协议的基础加密库我们需要先编译安装最新稳定版本。2.1 下载并解压OpenSSL源码wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar zxf openssl-1.1.1w.tar.gz cd openssl-1.1.1w2.2 配置与编译./config --prefix/usr/local/openssl --openssldir/usr/local/openssl shared zlib make -j$(nproc) sudo make install2.3 配置环境变量为了让系统找到新安装的OpenSSL库需要添加以下环境变量echo export PATH/usr/local/openssl/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/openssl/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc sudo ldconfig验证安装openssl version应该显示类似OpenSSL 1.1.1w的版本信息。3. 编译安装cURLcURL是Git用于处理HTTP/HTTPS请求的底层库必须正确编译以支持HTTPS。3.1 下载并解压cURL源码wget https://curl.se/download/curl-7.88.1.tar.gz tar zxf curl-7.88.1.tar.gz cd curl-7.88.13.2 配置与编译./configure --prefix/usr/local/curl --with-ssl/usr/local/openssl --with-zlib make -j$(nproc) sudo make install3.3 配置环境变量echo export PATH/usr/local/curl/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/curl/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc sudo ldconfig验证安装curl --version输出中应包含https协议支持和OpenSSL/1.1.1w字样。4. 编译安装Git现在我们可以编译支持HTTPS的Git了。4.1 下载并解压Git源码wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.40.1.tar.gz tar zxf git-2.40.1.tar.gz cd git-2.40.14.2 配置与编译make configure ./configure --prefix/usr/local/git --with-curl/usr/local/curl --with-openssl/usr/local/openssl make -j$(nproc) all sudo make install4.3 配置环境变量echo export PATH/usr/local/git/bin:$PATH ~/.bashrc source ~/.bashrc验证安装git --version应显示类似git version 2.40.1的版本信息。5. 常见问题排查即使按照上述步骤操作仍可能遇到一些问题。以下是常见问题的解决方案5.1 编译时出现RAND_egd错误如果编译cURL时出现类似以下错误vtls/openssl.c:438:15: error: implicit declaration of function RAND_egd这是因为新版本OpenSSL移除了这个函数。解决方法是在配置cURL时禁用egd支持./configure --prefix/usr/local/curl --with-ssl/usr/local/openssl --without-egd5.2 运行时找不到动态库如果执行git命令时出现类似以下错误error while loading shared libraries: libssl.so.1.1: cannot open shared object file这是因为系统找不到OpenSSL库。确保已正确设置LD_LIBRARY_PATH并执行了ldconfigexport LD_LIBRARY_PATH/usr/local/openssl/lib:$LD_LIBRARY_PATH sudo ldconfig5.3 Git仍不支持HTTPS如果git clone https://...仍然失败检查Git是否找到了正确的cURL库ldd /usr/local/git/bin/git | grep curl输出应指向/usr/local/curl/lib下的库文件。6. 系统集成与优化为了确保系统范围内使用新编译的Git可以创建符号链接sudo ln -sf /usr/local/git/bin/git /usr/bin/git同时可以设置Git的全局配置以优化HTTPS性能git config --global http.sslVerify true git config --global http.postBuffer 1048576000对于需要频繁访问的仓库可以启用Git的凭证缓存git config --global credential.helper cache git config --global credential.helper cache --timeout36007. 验证HTTPS支持最后通过克隆一个HTTPS仓库来验证一切工作正常git clone https://github.com/git/git.git如果克隆成功且没有警告信息说明已正确编译安装支持HTTPS的Git。

更多文章